Java和C中的位移差异 – 如何协调
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java和C中的位移差异 – 如何协调,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含871字,纯文字阅读大概需要2分钟。
内容图文
我在C中有一些代码,我正在尝试移植到Java,并且存在一个我无法解决的问题.
通过一个例子可以很容易地看到它.在C代码的某个阶段,我有一个unsigned int h,其值为594076817.然后我计算(h << 10).我得到的结果是2744271872. 在Java中,我有一个很长的594076817.然后我计算(h <<< 10),我得到608334660608. 我理解/怀疑这是由于表示的差异(unsigned vs signed)并试图沿着这些方式阅读而无济于事.使Java代码获得与C代码相同的结果的最佳方法是什么?
解决方法:
C代码似乎以32位整数运行.使用Java的32位整数类型int,代码
int h = 594076817;
System.out.println(h << 10);
打印-1550695424(Java的整数已签名).这是2744271872 – 232.当数据类型更改为64位整数类型long时,答案会更改:
long h = 594076817L;
System.out.println(h << 10);
这打印608334660608.当您截断608334660608的低32位以外的所有内容时,您将得到int答案:2744271872.
为了获得期望的结果,这似乎依赖于C中的溢出,在Java中使用long,但是使用0xFFFFFFFFL通过位和位对最后32位进行位掩码.
内容总结
以上是互联网集市为您收集整理的Java和C中的位移差异 – 如何协调全部内容,希望文章能够帮你解决Java和C中的位移差异 – 如何协调所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。