Java 控制无符号整数的最大值

Java 控制无符号整数的最大值,java,unsigned-integer,Java,Unsigned Integer,如果我有一个4位无符号整数,最大值是15。如果这个值是0,我减去1,我得到15。我可以将位大小增加1,最大值为31,依此类推。这很好,但我希望能够将最大值控制为2^n-1以外的值 如何创建自定义类型,以便在实例化时可以控制该最大值,同时保持与无符号int相同的效率 我考虑的这个用例是,我可以像循环链表一样处理元素数组,而不使用链表。对不起,如果这是一个愚蠢的问题 可以使用模运算符%,它返回两个操作数之间的余数。例如,如果希望最大值为13,则假设使用变量i进行索引,则可以执行array[i%14]

如果我有一个4位无符号整数,最大值是15。如果这个值是0,我减去1,我得到15。我可以将位大小增加1,最大值为31,依此类推。这很好,但我希望能够将最大值控制为2^n-1以外的值

如何创建自定义类型,以便在实例化时可以控制该最大值,同时保持与无符号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;
    }
}

然后,您可以对新的MaxInt(13,0)执行相同的操作。值将在0->13之间。

只需使用模式运算符(%)获取循环链接列表的前一个或下一个元素。对于exmaple,长度是n,索引是i,然后预索引是
(i-1+n)%n
,下一个索引是
(i+1)%n
Java没有无符号类型,句号。@chrylis onstrike-…除了
char
@jsheeran Touché。我明白了!我完全忘记了接线员的用法。谢谢@StephenLee没问题,如果您想尝试在类中包装该功能以创建自定义类型,我添加了一个编辑