java long数据类型转换为无符号值

use*_*845 0 java unsigned long-integer

我正在将一些C++代码移植到Java代码中.

java中没有无符号数据类型,可以容纳64位.

我有一个哈希码,它存储在Java的long数据类型中(当然是签名的).

long vp = hashcode / 38; // hashcode is of type 'long'
Run Code Online (Sandbox Code Playgroud)

由于此处的38大于2,因此结果数可以安全地用于java中的任何其他算术.

问题是如果'hashcode'中的signed bit设置为1.我不想在变量vp中得到负值.我想要一个正值,好像数据类型是无符号的.

PS:由于性能问题,我不想为此目的使用Biginteger.

Ant*_*ony 5

Java的主要整数类型被认为是已签名的,并且您无法对其进行任何操作.但是,根据您的需要,这可能无关紧要.

由于整数都是以二进制补码完成的,因此有符号和无符号在二进制级别上完全相同.不同之处在于您如何解释它们以及在某些操作中.具体而言,右移,除法,模数和比较不同.无符号右移可以由>>>操作员完成.只要您不需要其中一个缺少的运算符,就可以long完美地使用s.