首页 > 解决方案 > 控制无符号整数的最大值

问题描述

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

如何创建自定义类型,以便在实例化它时可以控制该最大值,同时保持与 unsigned int 相同的效率?

我正在考虑的用例是,我可以在不使用链表的情况下将元素数组视为循环链表。对不起,如果这是一个愚蠢的问题!

标签: javaunsigned-integer

解决方案


%您可以使用返回两个操作数之间余数的模运算符。例如,如果您希望最大值为 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 之间。


推荐阅读