"Unsigned int" 变成了一个简短的和返回的。这可能吗?如果可以怎么办?
呸呸呸。我忘记了带符号的数字是如何实现的。这个问题没有意义。不管怎么说,还是要谢谢你。我本来打算对自己投反对票,你可以这样做。
听起来您希望有一种可以为您完成工作的基本类型,但我认为不存在。另一方面,我不认为创建一个可以完成工作的对象会太难。根据需要进行调整以使其变短。
公共类 SpecialInt { 诠释 i = 0; 公共无效集(int i){ if ( i < 0 ) throw new IllegalArgumentException("不能为负"); 这个.i = i; } 公共无效添加(int j){ 整数 t = i+j; if( t < i ) throw new IllegalArgumentException("overflow!"); 我 = t; } 公共无效子(int j){ 诠释 t = ij; if( t > i ) throw new IllegalArgumentException("overflow!"); 我 = t; } 公共无效多(int j){ int mult_max = Integer.MAX_VALUE / i; if( j > mult_max ) throw new IllegalArgumentException("overflow!"); 我 *= j; } }
我不确定我是否完全理解这个问题,但如果您确定您的 int 适合短(您的数字在 0 到 2^16 之间),您可以随时将您的 int 转换为短:
int i = 65536;
short s = (short) i;
并取回无符号值: int i2 = s & 0xFFFF; System.out.println(i2);
将s & 0xFFFF
s 向上转换为 int 并且位掩码会将负数“转换”为它的无符号值(有点)。请记住,短变量 -1 中的 FFFF 不是 65536。
如果你的整数没有任何特定的特征,比如我认为你做不到的倍数。
问题是包含在 int 中的信息(通常是 32 位架构)不能包含在 short 中。
正如你所看到的,Short.MAX_VALUE
最大值是 2^15 - 1,因为一个 short 占用 16 位。所以你实际上失去了精度,你不能表达像 2²² 这样的整数。
如果你想要无符号类型,你可以使用Javolution库。