在Java中是否有一种方法来声明无符号整型?
或者这个问题也可以是这样的: Java中与unsigned等价的是什么?
只是为了告诉你上下文,我正在查看Java的String.hashcode()的实现。我想测试如果整数是32 unsigned int,碰撞的可能性。
在Java中是否有一种方法来声明无符号整型?
或者这个问题也可以是这样的: Java中与unsigned等价的是什么?
只是为了告诉你上下文,我正在查看Java的String.hashcode()的实现。我想测试如果整数是32 unsigned int,碰撞的可能性。
当前回答
我们需要无符号数字来在jOOQ中建模MySQL的无符号TINYINT, SMALLINT, INT, BIGINT,这就是为什么我们创建了jOOU,这是一个在Java中为无符号整数提供包装器类型的极简库。例子:
import static org.joou.Unsigned.*;
// and then...
UByte b = ubyte(1);
UShort s = ushort(1);
UInteger i = uint(1);
ULong l = ulong(1);
所有这些类型都扩展了java.lang.Number,并且可以转换为更高阶的原语类型和BigInteger。希望这能有所帮助。
(免责声明:我为这些库背后的公司工作)
其他回答
Java没有无符号整数的数据类型。
如果需要存储较大的值,可以定义long类型而不是int类型。
也可以像使用无符号整数一样使用有符号整数。two的补体表示的好处是,对于有符号整数和无符号整数,大多数操作(如加法、减法、乘法和左移)在二进制级别上是相同的。但是,有一些操作(除法、右移、比较和强制转换)是不同的。从Java SE 8开始,Integer类中的新方法允许您完全使用int数据类型来执行无符号算术:
在Java SE 8及更高版本中,可以使用int数据类型表示无符号32位整数,其最小值为0,最大值为2^32-1。使用Integer类将int数据类型用作无符号整数。像compareUnsigned, divideUnsigned等静态方法已经添加到Integer类中,以支持无符号整数的算术操作。
注意,int变量在声明时仍然是有符号的,但现在可以使用Integer类中的这些方法进行无符号算术。
对16位无符号整数使用char。
只是做了这段代码,它转换了“这个”。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);
}
可以使用Math.abs(number)函数。它返回一个正数。
对于无符号数字,您可以使用这些类从Guava库:
UnsignedInteger UnsignedLong
它们支持各种操作:
+ - 次 国防部 除以
目前似乎缺少的是字节移位操作符。如果需要,可以从Java中使用BigInteger。