This question already has answers here:
Multiplying long values?
(5个答案)
4年前关闭。
我真的很困惑,看到上面的代码段的输出。我期望得到相同(正确)的答案,但是这里x ^ 2实际上是错误的!
(5个答案)
4年前关闭。
public class Test {
public static void main(String [] s) {
int x = 99999;
long y = 99999;
long res = x * x;
System.out.println("x^2 = " + res);
res = y * y;
System.out.println("y^2 = " + res);
}
}
Output:
x^2 = 1409865409
y^2 = 9999800001
我真的很困惑,看到上面的代码段的输出。我期望得到相同(正确)的答案,但是这里x ^ 2实际上是错误的!
最佳答案
99999 * 99999
=二进制格式的1001010100000010001101011011000001
(如果对它们进行计数,您将发现需要34位才能在内存中表示该数字)。
int 长度为 32位,因此切出了两个 MSB 。
结果是01010100000010001101011011000001b
= 1409865409
十进制数。
将此值分配为64位长不会改变结果,两个整数相乘会得到整数。
关于java - 在这种特定情况下,确实与Java数据类型混淆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37156511/
10-12 17:26