Java整数最大范围乘法

时间:2015-03-05 06:03:45

标签: java

Integer num = 2147483647;
Integer res =  num * num;
System.out.println(res);

上面的输出是1.我不确定为什么。有人可以解释一下。

提前致谢。

4 个答案:

答案 0 :(得分:1)

这应该证明为什么result = 1:

    long x = Integer.MAX_VALUE;
    long y = Integer.MAX_VALUE;
    long res = x * y;
    System.out.println(Long.toHexString(res));

打印

3fffffff00000001

如果我们将res转换为int,我们将获得1

答案 1 :(得分:0)

这是因为整数溢出。 Java的最小值为-2,147,483,648,最大值为2,147,483,647(含),结果(res)超出整数最大范围。

答案 2 :(得分:0)

这是因为标志值为
      0: iconst_0
     1: istore_1

由于限制超出了Integer的范围,因此会设置1的标记,以了解有关其工作原理的更多信息use this link

答案 3 :(得分:0)

那是因为它溢出了整数范围,甚至很长,介于-2,147,483,648之间,最大值为2,147,483,647(含)。

如果是这样的话,你应该尝试使用BigInteger:

String num = "2147483647";
BigInteger mult = new BigInteger(num);
System.out.println(mult.multiply(mult));