在Java中是否有一种方法来声明无符号整型?
或者这个问题也可以是这样的: Java中与unsigned等价的是什么?
只是为了告诉你上下文,我正在查看Java的String.hashcode()的实现。我想测试如果整数是32 unsigned int,碰撞的可能性。
在Java中是否有一种方法来声明无符号整型?
或者这个问题也可以是这样的: Java中与unsigned等价的是什么?
只是为了告诉你上下文,我正在查看Java的String.hashcode()的实现。我想测试如果整数是32 unsigned int,碰撞的可能性。
当前回答
可以使用Math.abs(number)函数。它返回一个正数。
其他回答
我们需要无符号数字来在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。希望这能有所帮助。
(免责声明:我为这些库背后的公司工作)
对16位无符号整数使用char。
似乎你可以通过在使用值之前对它们进行“逻辑与”来处理签名问题:
使用实例(byte[] header[0]的值为0x86):
System.out.println("Integer "+(int)header[0]+" = "+((int)header[0]&0xff));
结果:
Integer -122 = 134
可以使用Math.abs(number)函数。它返回一个正数。
也许这就是你的意思?
long getUnsigned(int signed) {
return signed >= 0 ? signed : 2 * (long) Integer.MAX_VALUE + 2 + signed;
}
getUnsigned(0) → 0 getUnsigned(1) → 1 getUnsigned(Integer.MAX_VALUE) → 2147483647 getUnsigned(Integer.MIN_VALUE) → 2147483648 获取未签名(Integer.MIN_VALUE+1) → 2147483649