Java 长整数中的整数溢出乘积

Java Integer overflow product in a long integer

我有一个愚蠢的问题。

long val = Integer.MIN_VALUE * -1;
System.out.println(val);

为什么会打印 -2147483648.

一个long应该可以容纳上面的产品吧?输出不应该是 2147483648

乘积计算为 int,然后转换为 long。但是如果一个操作数很长,结果就是预期的结果。

-1 更改为 -1L 以计算为 long

public static void main(String[] args) {
    long val = Integer.MIN_VALUE * -1;
    long longVal = Integer.MIN_VALUE * -1L;
    System.out.println(Integer.MIN_VALUE);
    System.out.println(val);
    System.out.println(longVal);
}

输出为

-2147483648
-2147483648
2147483648