如果我有一个4位无符号整数,则最大值为15。如果该值为0且我减去1,则得到15。我可以将位长增加1,最大值为31,依此类推,等等。等等。很好,但是我希望能够将最大值控制为2 ^ n-1以外的值。
如何创建自定义类型,以便在实例化此最大值时可以控制该最大值,同时保持与unsigned int相同的效率?
我正在考虑的用例是,这样我就可以像对待循环链接列表一样对待元素数组,而无需使用链接列表。抱歉,这是一个愚蠢的问题!
您可以使用模运算符%
,该运算符返回两个操作数之间的余数。例如,如果您希望最大值为13,假设您正在使用变量编制索引,则i
可以这样做array[i % 14]
,导致索引仅在0-> 13的范围内。我不确定是否存在使用此属性创建自定义类型的方法,除非您创建了一个类并实现了加法和减法运算符的方法以创建与无符号整数相同的行为。这是要点:
public class MaxInt {
private final int max;
private int value;
public MaxInt(int max, int value) {
this.max = max;
this.value = value;
}
public MaxInt plus(int a) {
return new MaxInt(this.max, (this.value + a) % (this.max + 1));
}
public MaxInt minus(int a) {
return new MaxInt(this.max, (this.value - a) % (this.max + 1));
}
public getValue() {
return this.value;
}
}
然后,您可以执行相同的操作,new MaxInt(13, 0)
并且您的值将介于0-> 13之间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句