控制 unsigned int 的最大值
Controlling the maximum value of an unsigned int
如果我有一个 4 位无符号整数,最大值为 15。如果值为 0,我减去 1,我得到 15。我可以将位大小增加 1,最大值为 31 , 等等等等。这很好,但我希望能够将最大值控制为 2^n - 1 以外的值。
如何创建自定义类型,以便在实例化时控制此最大值,同时保持与 unsigned int 相同的效率?
我想到的用例是这样我就可以在不使用链表的情况下像循环链表一样处理元素数组。对不起,如果这是一个愚蠢的问题!
您可以使用取模运算符 %
,其中 returns 两个操作数之间的余数。例如,如果您希望最大值为 13,假设您使用变量 i
进行索引,您可以执行 array[i % 14]
,这将导致索引仅在 0 -> 13 范围内. 我不确定是否有办法用这个 属性 创建自定义类型,除非你创建了一个 class 并实现了加法和减法运算符的方法来创建与使用相同的行为你的无符号整数。这是它的要点:
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 之间。
如果我有一个 4 位无符号整数,最大值为 15。如果值为 0,我减去 1,我得到 15。我可以将位大小增加 1,最大值为 31 , 等等等等。这很好,但我希望能够将最大值控制为 2^n - 1 以外的值。
如何创建自定义类型,以便在实例化时控制此最大值,同时保持与 unsigned int 相同的效率?
我想到的用例是这样我就可以在不使用链表的情况下像循环链表一样处理元素数组。对不起,如果这是一个愚蠢的问题!
您可以使用取模运算符 %
,其中 returns 两个操作数之间的余数。例如,如果您希望最大值为 13,假设您使用变量 i
进行索引,您可以执行 array[i % 14]
,这将导致索引仅在 0 -> 13 范围内. 我不确定是否有办法用这个 属性 创建自定义类型,除非你创建了一个 class 并实现了加法和减法运算符的方法来创建与使用相同的行为你的无符号整数。这是它的要点:
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 之间。