gpt4 book ai didi

java - 两个整数相乘溢出导致负数

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:30:06 24 4
gpt4 key购买 nike

考虑 Java 语言规范中的这段代码。

class Test {
public static void main(String[] args) {
int i = 1000000;
System.out.println(i * i);
long l = i;
System.out.println(l * l);
}
}

输出是

-727379968
1000000000000

为什么 (i*i) 的结果是 -727379968?理想情况下,它应该是 1000000000000。

我知道整数的范围是从 –2147483648 到 2147483647。所以显然是 1000000000000不在给定的范围内。

为什么结果会变成-727379968

最佳答案

Java(就像当今大多数计算机体系结构一样)使用一种叫做 two's complement arithmetic 的东西,它使用整数的最高有效位来表示一个数是负数。如果将两个大数字相乘,最终得到的数字太大以至于设置了最高位,结果最终为负数。

关于java - 两个整数相乘溢出导致负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7215411/

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