Java整数最大范围乘法

Java整数最大范围乘法,java,Java,以上的输出为1。我不知道为什么。有人能解释一下吗 提前感谢。这是因为整数溢出。Java的最小值为-2147483648,最大值为2147483647(含),结果(res)超出了整数最大范围。这是因为标志值 0:iconst\u 0 1:istore\u 1 由于限制超出了整数的范围,它将设置1的标志,以了解其工作原理,这是因为它溢出了整数甚至长的范围,该范围介于-2147483648和最大值2147483647(包括)之间 如果出现以下情况,应尝试使用BigInteger: Integer nu

以上的输出为1。我不知道为什么。有人能解释一下吗


提前感谢。

这是因为整数溢出。Java的最小值为-2147483648,最大值为2147483647(含),结果(res)超出了整数最大范围。

这是因为标志值
0:iconst\u 0

1:istore\u 1


由于限制超出了
整数
的范围,它将设置
1
的标志,以了解其工作原理

,这是因为它溢出了整数甚至长的范围,该范围介于-2147483648和最大值2147483647(包括)之间

如果出现以下情况,应尝试使用BigInteger:

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

这是为了说明为什么结果=1:

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

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

如果我们将res强制转换为int,我们将得到1

溢出…….整数的有限范围为2^32-1。。。大约20亿2^32-1表示无符号整数,(2^32-1)/2表示有符号整数让我重新表述我的问题。我知道它超出了整数的界限。但为什么结果是一。什么逻辑?我看了Integer.java类,但没有发现任何有用的东西。
3fffffff00000001