首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java long数据类型到无符号值的转换

问java long数据类型到无符号值的转换
EN

Stack Overflow用户
提问于 2012-10-29 09:54:02
回答 3查看 419关注 0票数 0

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

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

我有一个哈希码,它存储在Java的long数据类型中(当然是带符号的)。

代码语言:javascript
复制
long vp = hashcode / 38; // hashcode is of type 'long'

因为这里的38大于2,所以生成的数字可以安全地用于java中的任何其他算术。

问题是,如果“hashcode”中的有符号位被设置为1,我不想在变量vp中得到负值。我想要一个正值,就好像数据类型是无符号的一样。

附言:由于性能问题,我不想使用Biginteger来达到这个目的。

EN

回答 3

Stack Overflow用户

发布于 2012-10-29 10:09:43

Java的原始整数类型被认为是有符号的,对此您实际上无能为力。但是,根据您需要它的用途,这可能无关紧要。

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

票数 5
EN

Stack Overflow用户

发布于 2012-10-29 13:05:15

如果您可以使用第三方库,则可以使用Guava的UnsignedLongs类将long值视为无符号的,用于许多目的,包括除法。(披露:我为Guava做出了贡献。)

票数 1
EN

Stack Overflow用户

发布于 2012-10-31 05:41:10

这就是我解决这个问题的方法。将哈希码右移1位(除以2)。然后将右移的数字除以19(即38/2)。因此,基本上我将数字除以38,就像在c++中一样。我得到了与在c++中相同的值

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13115015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档