我有一些C ++代码正在尝试移植到Java,但有一个我无法解决的问题。
用一个例子很容易看出。在C ++代码的某个阶段,我有一个无符号int h,其值为594076817。然后,我计算(h << 10)。我得到结果2744271872。
在Java中,我有一个很长的594076817。然后我计算(h << 10),得到608334660608。
我了解/怀疑这是由于表示形式的差异(无符号与有符号)造成的,并且已经尝试按照这些原则进行阅读而无济于事。使Java代码获得与C ++代码相同的结果的最佳方法是什么?
C ++代码似乎在32位整数上运行。使用Java的32位整数类型int
,代码
int h = 594076817;
System.out.println(h << 10);
打印-1550695424
(对Javaint
进行签名)。这是2744271872
-2 32。当数据类型更改为64位整数类型时long
,答案将更改:
long h = 594076817L;
System.out.println(h << 10);
打印608334660608
。当截断的低32位以外的所有内容时608334660608
,您会得到int
答案:2744271872
。
要获得所需的结果(似乎依赖于C ++中的溢出),请long
在Java中使用,但使用进行位与运算以对后32位进行位掩码0xFFFFFFFFL
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句