Java和C++中的位偏移差异-如何协调
Bit shifting difference in Java and C++ - how to reconcile
我在C++中有一些代码试图移植到Java,但有一个问题我无法解决。
举个例子很容易看出。在C++代码的某个阶段,我有一个值为594076817的无符号int h。然后我计算(h<<10)。我得到的结果是2744271872。
在Java,我有一个长594076817。然后我计算(h<<10),得到608334660608。
我理解/怀疑这是由于表示方式的差异(无符号与有符号),并试图按照这些思路阅读,但没有效果。让Java代码获得与C++代码相同的结果的最佳方法是什么?
C++代码似乎在32位int上运行。使用Java的32位整数类型int
,代码
int h = 594076817;
System.out.println(h << 10);
打印-1550695424
(Java的int
被签名)。这是2744271872
-232。当数据类型更改为64位整数类型long
时,答案会更改:
long h = 594076817L;
System.out.println(h << 10);
这将打印608334660608
。当您截断608334660608
的低32位之外的所有内容时,您将得到int
的答案:2744271872
。
为了获得所需的结果,似乎依赖于C++中的溢出,在Java中使用long
,但使用0xFFFFFFFFL
逐位屏蔽最后32位。
相关文章:
- 函数何时会在c++中包含stack_Unwind_Resume调用
- Python中的for循环与C++有何不同
- 在C++中释放内存期间,迭代器与指针有何不同
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 类中的 C++ int 被设置为值,似乎不知从何而来
- 在两个类上协调析构函数,其中一个类需要首先清理
- 屏幕上协调对象
- Cassandra中C 驱动程序的协调器节点和接触点之间的差异
- 在大型组名称的协调时崩溃
- 在混合 C/C++ 程序中协调 malloc 和 new 的"正确"方法是什么?
- 开源 c++ 程序,接收 GPS (NMEA) 句子或 x,y 协调并在地图上播放位置
- 协调转换和投影问题
- VTK:协调两个参与者
- 控制台c++中的协调系统
- 启动时的C++协调过程
- OpenGL:规范化世界协调
- Java和C++中的位偏移差异-如何协调
- 检查一个点是否在阴阳(协调系统)c++的好或坏的部分
- 没有像mutex_Lock这样的协调机制的线程
- 在Cocos2dx中协调多个精灵动画