java - 控制无符号整数的最大值
问题描述
如果我有一个 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 之间。
推荐阅读
- php - 如何修改此 PHP 代码以导出数组中的配置文件而不是单个对象?
- arrays - 用vba中其他数组的内容过滤二维数组的最快方法
- c++ - 给定整数 n,d,i [ n*d + (id) ]%n 等价于 [n + (id)]%n?(% c++ 取模)
- flutter - TextField & BLoC : 预填充字段
- scala - 如何在 Actor 的同一线程内获取 http.singleRequest(httpRequest) 的 Httpresponse?
- r - 导入文本文件时出现不需要的字符“â^”
- exception - SwiftUI - 领域:无法从中删除关键路径的观察者,因为它没有注册为观察者
- postgis - Geotools StreamingRenderer 点问题时使用 Simplefeaturecollection 而不是 Simplefeaturesource 使用 postgis 数据库
- mysql - MYSQL如何生成序列和使用distinct
- css - 我的网站在任何地方都能响应,但是在调整浏览器窗口大小时