为了账号安全,请及时绑定邮箱和手机立即绑定

在Java中声明一个unsigned int

在Java中声明一个unsigned int

UYOU 2019-11-26 11:11:28
有没有办法在Java中声明一个无符号的int?或也可以这样构想这个问题:Java的unsigned等同于什么?只是为了告诉您上下文,我正在查看Java的实现String.hashcode()。我想测试整数是否为32 unsigned int时发生冲突的可能性。
查看完整描述

3 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

Java没有无符号整数的数据类型。


如果需要存储较大的值,可以定义一个,long而不是一个int。


您也可以使用带符号的整数,就好像它是无符号的一样。二进制补码表示法的好处在于,对于有符号和无符号整数,大多数操作(例如加法,减法,乘法和左移)在二进制级别上都是相同的。但是,一些操作(除法,右移,比较和转换)是不同的。从Java SE 8开始,Integer该类中的新方法允许您完全使用int数据类型来执行无符号算术:


在Java SE 8和更高版本中,可以使用int数据类型表示无符号的32位整数,其最小值为0,最大值为2 ^ 32-1。使用Integer类可将int数据类型用作无符号整数。像静态方法compareUnsigned,divideUnsigned等已被添加到Integer类支持算术运算的无符号整数。


请注意,int变量在声明时仍然是带符号的,但是现在可以通过使用Integer类中的这些方法来进行无符号算术运算。


查看完整回答
反对 回复 2019-11-26
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

一个int值是带符号的还是无符号的,取决于位的解释方式-Java将位解释为带符号的值(它没有无符号的原语)。


如果您有一个要解释为无符号值的整数(例如,从知道包含无符号值的DataInputStream读取一个整数),则可以执行以下技巧。


int fourBytesIJustRead = someObject.getInt();

long unsignedValue = fourBytesIJustRead & 0xffffffffl;

请注意,十六进制字面量是一个长字面量,而不是整数字面量是很重要的,因此末尾为“ l”。


查看完整回答
反对 回复 2019-11-26
  • 3 回答
  • 0 关注
  • 1454 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信