首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Java要砍掉这么长的高阶位呢?

为什么Java要砍掉这么长的高阶位呢?
EN

Stack Overflow用户
提问于 2013-09-01 21:07:28
回答 2查看 214关注 0票数 2

考虑以下代码:

代码语言:javascript
复制
System.out.println(1 + 0xFFFFFFFFL);
System.out.println(1L + 0xFFFFFFFF);

第一行打印期望值4294967296。但是第二行打印一个0。我检查了这两个表达式的类型(通过将它们传递给方法),这两个表达式都被JVM识别为long。Lava 7语言规范指出,对于二进制操作,“如果任一操作数类型为long,则另一个操作数转换为long。”事情似乎就是这样,但我有两个问题:

  1. 如果两个操作数最终都是长的,为什么第一个表达式中的高阶位被砍掉了?
  2. 为什么命令重要?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-01 21:12:34

0xFFFFFFFF等于-1。当您添加1 + -1时,得到0。

订单很重要,因为0xFFFFFFFFL != (long) 0xFFFFFFFF

就像(double) 0.1F != 0.1一样

票数 6
EN

Stack Overflow用户

发布于 2013-09-01 21:09:40

默认情况下,在java中,所有数字常量都是int

在第二个例子中,因为java使用二补二进制表示,所以表达式0xFFFFFFFF-1作为int,当扩展到long时,这个表达式保持为-1,所以您已经编码了1 + -1,给出了零。

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

https://stackoverflow.com/questions/18562953

复制
相关文章

相似问题

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