gpt4 book ai didi

java - 为什么最大整数乘法的结果是 1

转载 作者:行者123 更新时间:2023-11-29 09:34:26 29 4
gpt4 key购买 nike

我觉得不需要太多解释,为什么下面的计算结果是1?

int a = 2147483647;
int b = 2147483647;

int c = a * b;
long d = a * b;
double e = a * b;

System.out.println(c); //1
System.out.println(d); //1
System.out.println(e); //1.0

最佳答案

整数2147483647的二进制表示如下:

01111111 11111111 11111111 11111111

将其与自身相乘得到数字 4611686014132420609,其二进制表示为:

00111111 11111111 11111111 11111111 00000000 00000000 00000000 00000001

这对于只有 32 位的 int 类型来说太大了。 a * b 的乘法仅作为整数乘法完成,与结果分配给的变量类型无关(这可能会进行扩大转换,但仅在乘法之后)。

所以,结果只是把所有不适合32位的位都删掉了,只剩下下面的结果:

00000000 00000000 00000000 00000001

这就是值 1。

如果你想保留信息,你必须用64位的long类型做乘法:

long a = 2147483647;
long b = 2147483647;
long mult = a * b;

System.out.println((int) mult); // 1
System.out.println(mult); // 4611686014132420609
System.out.println((double) mult); // 4.6116860141324206E18

如果您需要更多位进行计算,您可以考虑 BigInteger (对于整数)或 BigDecimal (对于十进制数)。

关于java - 为什么最大整数乘法的结果是 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39673700/

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