假设,我有一个简单的方法:
public int add(int a, int b) {
return a + b;
}如果我用max int值运行它
add(2147483647, 2147483647);我得到了-2。我发现,如果我们溢出int,然后转到最小整数值(-2147483648)并继续添加。
我们来算一算吧。如果我添加2147483647 + 2147483647,我应该得到-1,因为
-2147483648 + 2147483647 = -1那我为什么要得到-2
发布于 2015-09-12 14:08:57
你可以这样想:
2147483647 + 2147483647
= 2147483647 + ( 1 + 2147483646 )
= ( 2147483647 + 1 ) + 2147483646
= -2147483648 + 2147483646 // Because of overflow
= -2也就是说,要使左2147483647溢出,必须向其添加1。这1来自右手2147483647,所以现在只剩下2147483646了.
当然,在内部,它是通过2s-补语加法完成的,而不是通过添加1s直到你到达终点。以上只是澄清了数学。
发布于 2015-09-12 14:10:05
我们做点数学吧。麦克斯是2147483647,而min是-2147483648。
2147483647 + 1 = -2147483648
2147483647 + 2 = -2147483647
...
2147483647 + n = -2147483648 + n - 1对于n = 2147483647给出的
2147483647 + 2147483647 = -2147483648 + 2147483647 - 1 = -1 - 1 = -2https://stackoverflow.com/questions/32539712
复制相似问题