gpt4 book ai didi

java - 为什么这个 java 表达式返回一个负结果?

转载 作者:行者123 更新时间:2023-11-29 10:05:46 25 4
gpt4 key购买 nike

public static void main (String[] ses) {
System.out.println(740 * (24 * 60 * 60 * 1000));
}

在谷歌上试过,它在科学计算器上也给出了不同的结果。

最佳答案

因为结果是 63,936,000,000,这超出了您可以存储在 Java 整数中的数量(默认情况下,因为它们都没有以 L 开头)。一个整数只能存储 4 个字节(32 位),而这个数字需要 36 位。然后它溢出,基本上只使用结果的最后(第一个?)32 位。因为这些位的第一个(最后一个?取决于你如何看待它)决定了一个数字是否有符号,当这个数字再次被实际视为整数时,它显示为负数。

这对于计算哈希值特别有用,因为我看到的唯一合乎逻辑的选择是使所有超过最大值的数字都等于最大值,我认为我们可以同意这是一个糟糕的选择。

如果你做到了 System.out.println(740L * (24 * 60 * 60 * 1000)); 它应该使用可以存储更大数字的 long。

你会注意到我在这里有问号 - 字节是字节,比特是比特。真正重要的是你如何解读它们。在软件开发社区中,对于第一个数字、位或字节的真正含义存在争议。将“1234”视为一个数字。 1是第一个数字吗?大多数普通人会同意它是,因为当我们看到它时,它首先被写下来。但其他人会认为 4 是第一个数字,因为为了计算目的这样做很方便。 (考虑添加 - 你先在哪里添加?那不是第一个数字吗?)

所以这就是为什么我首先/最后说的时候显得优柔寡断 - 我只是想弄清楚发生了什么。

关于java - 为什么这个 java 表达式返回一个负结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8571905/

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