This question already has answers here:
Multiplying long values?

(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