【发布时间】:2023-03-05 10:23:02
【问题描述】:
我最近遇到以下问题
public class Main {
public static void main(String[] args) throws Exception {
// Your code here!
int i = -2147483648;
int j = i * -1;
System.out.println("j="+j);
}
}
结果:-2147483648
带有代码的在线 IDE: https://paiza.io/projects/e/17lF_6-GltIcyubZv3QoFg?theme=twilight
但是按照我需要得到 2147483648 的逻辑,它是如何工作的,结果对吗? 那我是怎么得到这个负数的? 是因为整数范围(Integer.MIN_VALUE)? 如何解决这个问题?
【问题讨论】:
-
这个数字对于 int 来说太大了。请改用 long。
-
修复很简单,长期使用。解释是找出 2s 补码和表示以及如何检测溢出。请参阅 Java 中的 Math.exact > 8