Integer num = 2147483647;
Integer res = num * num;
System.out.println(res);
上面的输出是1.我不确定为什么。有人可以解释一下。
提前致谢。
答案 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));