在Java中是否有一种方法来声明无符号整型?
或者这个问题也可以是这样的: Java中与unsigned等价的是什么?
只是为了告诉你上下文,我正在查看Java的String.hashcode()的实现。我想测试如果整数是32 unsigned int,碰撞的可能性。
在Java中是否有一种方法来声明无符号整型?
或者这个问题也可以是这样的: Java中与unsigned等价的是什么?
只是为了告诉你上下文,我正在查看Java的String.hashcode()的实现。我想测试如果整数是32 unsigned int,碰撞的可能性。
当前回答
对16位无符号整数使用char。
其他回答
似乎你可以通过在使用值之前对它们进行“逻辑与”来处理签名问题:
使用实例(byte[] header[0]的值为0x86):
System.out.println("Integer "+(int)header[0]+" = "+((int)header[0]&0xff));
结果:
Integer -122 = 134
可以使用Math.abs(number)函数。它返回一个正数。
只是做了这段代码,它转换了“这个”。Altura "从负数到正数。希望这能帮助到需要帮助的人
if(this.altura < 0){
String aux = Integer.toString(this.altura);
char aux2[] = aux.toCharArray();
aux = "";
for(int con = 1; con < aux2.length; con++){
aux += aux2[con];
}
this.altura = Integer.parseInt(aux);
System.out.println("New Value: " + this.altura);
}
int中的值是有符号还是无符号取决于位是如何解释的——Java将位解释为有符号值(它没有无符号原语)。
如果你有一个int,你想解释为unsigned值(例如,你从DataInputStream读取一个int,你知道应该解释为unsigned值),那么你可以做下面的技巧。
int fourBytesIJustRead = someObject.getInt();
long unsignedValue = fourBytesIJustRead & 0xffffffffL;
注意,重要的是十六进制字面值是一个长字面值,而不是int字面值-因此'L'在末尾。
对于无符号数字,您可以使用这些类从Guava库:
UnsignedInteger UnsignedLong
它们支持各种操作:
+ - 次 国防部 除以
目前似乎缺少的是字节移位操作符。如果需要,可以从Java中使用BigInteger。