java - 在这种特定情况下,Java 数据类型真的很困惑

标签 java long-integer

<分区>

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 位来表示内存中的这个数字)

int32 位 长,因此两个 MSB 被切掉。

结果是 01010100000010001101011011000001b = 1409865409 十进制。

将此值分配给 64 位长不会改变结果,两个整数相乘得到整数作为结果。

关于java - 在这种特定情况下,Java 数据类型真的很困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37156511/

相关文章:

algorithm - long long 除法与 32 位内存

java - 在 Java 中执行计算给出了完全错误的答案

c - 在C中添加不同类型的变量

java - 具有监控功能的调度程序

java - 使用已弃用的 api 时如何过滤来自 java 控制台的警告

java - 当互联网连接突然断开时,套接字会发生什么情况?

java - 为什么长期不能从零开始?

java - apache cxf - 指定端点 url

java - 根据 "Fibonacci sequence"寻找答案

java - 字符串转长 : error : number format Exception:for Input String "3.1"?