有没有办法在Java中声明一个无符号的int?
或者,问题也可能是这样的:什么是未签名的Java等价物?
我只是想告诉你我正在研究的是Java的String.hashcode()
__实现。我想测试一下如果整数是32无符号整型的话冲突的可能性。
发布于 2012-03-25 02:11:29
Java没有用于unsigned integers的数据类型。
如果需要存储较大的值,则可以定义long
而不是int
。
也可以像使用无符号整数一样使用有符号整数。two's complement representation的优点是,对于有符号整数和无符号整数,大多数运算(如加、减、乘和左移)在二进制级别上是相同的。然而,一些操作(除法、右移、比较和强制转换)是不同的。从JavaSE8开始,Integer
类中的新方法允许您充分使用int
数据类型to perform unsigned arithmetic
在JavaSE8和更高版本中,您可以使用int数据类型来表示无符号32位整数,它的最小值为0,最大值为2^32-1。使用integer类可以将int数据类型用作无符号整数。像
compareUnsigned
、divideUnsigned
等静态方法已经被添加到Integer类中,以支持无符号整数的算术运算。
请注意,在声明时,int
变量仍然是有符号的,但是通过在Integer
类中使用这些方法,现在可以进行无符号运算。
发布于 2013-11-26 01:04:58
发布于 2014-04-08 21:10:13
int中的值是有符号的还是无符号的取决于如何解释位- Java将位解释为有符号值(它没有无符号的原语)。
如果你有一个想要解释为无符号值的整数(例如,你从一个你知道应该被解释为无符号值的DataInputStream
中读取一个整数),那么你可以做下面的技巧。
int fourBytesIJustRead = someObject.getInt();
long unsignedValue = fourBytesIJustRead & 0xffffffffL;
请注意,十六进制文字是一个长文字,而不是一个整数文字,这一点很重要--因此在末尾要加上'L‘。
https://stackoverflow.com/questions/9854166
复制相似问题