在Java中声明一个unsigned int

有没有办法在Java中声明一个无符号的int?

或也可以这样构想这个问题:Java的unsigned等同于什么?

只是为了告诉您上下文,我正在查看Java的实现String.hashcode()。我想测试整数是否为32 unsigned int时发生冲突的可能性。


UYOU
浏览 1462回答 3
3回答

撒科打诨

Java没有无符号整数的数据类型。如果需要存储较大的值,可以定义一个,long而不是一个int。您也可以使用带符号的整数,就好像它是无符号的一样。二进制补码表示法的好处在于,对于有符号和无符号整数,大多数操作(例如加法,减法,乘法和左移)在二进制级别上都是相同的。但是,一些操作(除法,右移,比较和转换)是不同的。从Java SE 8开始,Integer该类中的新方法允许您完全使用int数据类型来执行无符号算术:在Java SE 8和更高版本中,可以使用int数据类型表示无符号的32位整数,其最小值为0,最大值为2 ^ 32-1。使用Integer类可将int数据类型用作无符号整数。像静态方法compareUnsigned,divideUnsigned等已被添加到Integer类支持算术运算的无符号整数。请注意,int变量在声明时仍然是带符号的,但是现在可以通过使用Integer类中的这些方法来进行无符号算术运算。

侃侃尔雅

一个int值是带符号的还是无符号的,取决于位的解释方式-Java将位解释为带符号的值(它没有无符号的原语)。如果您有一个要解释为无符号值的整数(例如,从知道包含无符号值的DataInputStream读取一个整数),则可以执行以下技巧。int fourBytesIJustRead = someObject.getInt();long unsignedValue = fourBytesIJustRead & 0xffffffffl;请注意,十六进制字面量是一个长字面量,而不是整数字面量是很重要的,因此末尾为“ l”。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java