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类中的这些方法来进行无符号算术运算。
TA贡献1801条经验 获得超16个赞
一个int值是带符号的还是无符号的,取决于位的解释方式-Java将位解释为带符号的值(它没有无符号的原语)。
如果您有一个要解释为无符号值的整数(例如,从知道包含无符号值的DataInputStream读取一个整数),则可以执行以下技巧。
int fourBytesIJustRead = someObject.getInt();
long unsignedValue = fourBytesIJustRead & 0xffffffffl;
请注意,十六进制字面量是一个长字面量,而不是整数字面量是很重要的,因此末尾为“ l”。
添加回答
举报