gpt4 book ai didi

java - 为什么 Java 会砍掉这么长的高阶位?

转载 作者:行者123 更新时间:2023-12-03 22:52:41 24 4
gpt4 key购买 nike

考虑以下代码:

System.out.println(1 + 0xFFFFFFFFL);
System.out.println(1L + 0xFFFFFFFF);

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

  1. 如果两个操作数最终都是 long,为什么第一个表达式中的高位被砍掉了?

  2. 为什么顺序很重要?

最佳答案

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

顺序很重要,因为 0xFFFFFFFFFL != (long) 0xFFFFFFFF

就像(double) 0.1F != 0.1

关于java - 为什么 Java 会砍掉这么长的高阶位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18562953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com