【发布时间】:2018-12-05 19:45:02
【问题描述】:
我正在寻找i 的值,其中i==i+1 应始终为true。其他一些人使用double 和float 来找到问题的解决方案。
我试图回答有关堆栈溢出的问题。并考虑了整数,试图看看这是否也可能。
但是在多次操作Integer.MAX_VALUE 和Integer.MIN_VALUE 时,我发现了这种奇怪的行为:
Integer.MAX_VALUE + 1 == Integer.MIN_VALUE
但是Integer.MAX_VALUE * 2 == -2 和Integer.MAX_VALUE * 4 == -4
仅当我使用偶数(例如 (2,4,6,8,10,12...))时才会发生这种情况。当我使用除 1 以外的奇数值时,会发生这种情况:
Integer.MAX_VALUE * n == Integer.MAX_VALUE - n + 1 其中n != Integer.MIN_VALUE 和n > Integer.MIN_VALUE
为什么会这样?有什么我想念的吗?
编辑:我看到有人将问题标记为重复但导航到引用的链接,我的问题不同。
如果溢出,它会回到最小值并从那里继续。如果它下溢,它会回到最大值并>从那里继续。
我已经仔细阅读了那里的答案,但没有人解释原因:
如果 x 是偶数,Integer.MAX_VALUE*x 应该是 -x,如果 y 是奇数,Integer.MAX_VALUE*y 应该是 Integer.MAX_VALUE-y+1。
这正是我最困惑的地方。
【问题讨论】:
-
你不清楚哪一部分?
-
在哪里
Integer.MAX_VALUE*2==-2但Integer.MAX_VALUE*3==2147483645至少也应该是-3? -
点明白了......有趣的问题,从来没有想过它