Java 控制无符号整数的最大值
如果我有一个4位无符号整数,最大值是15。如果这个值是0,我减去1,我得到15。我可以将位大小增加1,最大值为31,依此类推。这很好,但我希望能够将最大值控制为2^n-1以外的值 如何创建自定义类型,以便在实例化时可以控制该最大值,同时保持与无符号int相同的效率Java 控制无符号整数的最大值,java,unsigned-integer,Java,Unsigned Integer,如果我有一个4位无符号整数,最大值是15。如果这个值是0,我减去1,我得到15。我可以将位大小增加1,最大值为31,依此类推。这很好,但我希望能够将最大值控制为2^n-1以外的值 如何创建自定义类型,以便在实例化时可以控制该最大值,同时保持与无符号int相同的效率 我考虑的这个用例是,我可以像循环链表一样处理元素数组,而不使用链表。对不起,如果这是一个愚蠢的问题 可以使用模运算符%,它返回两个操作数之间的余数。例如,如果希望最大值为13,则假设使用变量i进行索引,则可以执行array[i%14]
我考虑的这个用例是,我可以像循环链表一样处理元素数组,而不使用链表。对不起,如果这是一个愚蠢的问题 可以使用模运算符
%
,它返回两个操作数之间的余数。例如,如果希望最大值为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;
}
}
然后,您可以对新的MaxInt(13,0)执行相同的操作。值将在0->13之间。只需使用模式运算符(%)获取循环链接列表的前一个或下一个元素。对于exmaple,长度是n,索引是i,然后预索引是
(i-1+n)%n
,下一个索引是(i+1)%n
Java没有无符号类型,句号。@chrylis onstrike-…除了char
@jsheeran Touché。我明白了!我完全忘记了接线员的用法。谢谢@StephenLee没问题,如果您想尝试在类中包装该功能以创建自定义类型,我添加了一个编辑