【发布时间】:2012-03-12 22:32:10
【问题描述】:
System.out.println(Integer.MAX_VALUE + 1 == Integer.MIN_VALUE);
是真的。
我知道 Java 中的整数是 32 位的,不能超过 231-1,但我不明白为什么在其 MAX_VALUE 上加 1 会导致 MIN_VALUE 和不是某种例外。更不用说像 Ruby 那样将透明转换为更大的类型。
此行为是否在某处指定?我可以依赖它吗?
【问题讨论】:
-
现在这里有很多很好的答案,但是我现在很好奇你为什么问“我可以依靠它吗?” - 为什么要依赖它?
-
这可能是另一个问题,---我正在寻找一些“迭代器”,它会从元素 N 开始迭代数组,然后在到达结束元素后开始从元素 0 迭代到元素 N- 1 --- 这种整数行为可能对此有用......但我最终只有两个不同的循环
-
更令人困惑的是为什么INT最小值的反转仍然是负数!
int b = -Integer.MIN_VALUE;!! 2 的补码数学太混乱了。 -
所有这些答案,都解决了 int 的工作原理,但没有一个回答这个问题:它为什么这样做?为什么不抛出异常?允许 Integer.MAX_VALUE + 1 == -2147483648 是否有一些有用的功能?
标签: java integer integer-overflow twos-complement jls