標籤:
Integer.MIN_VALUE-1 = Integer.MAX_VALUE
Integer.MAX_VALUE+1 = Integer.MIN_VALUE
實際上這裡是電腦底層的位元運算法則問題[1]
電腦底層採用了補碼來進行加減乘除的運算,好處是符號位參與運算.
舉上面兩個例子來說明問題。
Integer.MIN_VALUE: $10000000000000000000000000000000$
Integer.MAX_VALUE: $01111111111111111111111111111111$
-1: $11111111111111111111111111111111$
一、
Integer.MIN_VALUE - 1 = Integer.MIN_VALUE + (-1)
$10000000000000000000000000000000$
+ $11111111111111111111111111111111$
---------------------------------------------------
$1,01111111111111111111111111111111$
捨棄最高位的進位,所以得到的就是Integer.MAX_VALUE
二、
Integer.MAX_VALUE + 1= Integer.MIN_VALUE
$01111111111111111111111111111111$
+ $00000000000000000000000000000001$
---------------------------------------------------
$10000000000000000000000000000000$
除了補碼之外,還有反碼、移碼等等。
1、反碼
整數是它本身,負數是符號位不變數值位求反
2、移碼
主要用於浮點數的表示當中的階碼
相應的補碼符號位求反就是移碼
[1] http://wenku.baidu.com/link?url=8ques5GUmTWrFybpKKFQG_bstr-7A4EdLatGIqcFMaL9xtDBgrSrO0GHEvQ5MZgld4u1leMs04wvqsYnnQ9CS_ryY1gu7YyW0n5pdni8_Qy
[2] http://blog.csdn.net/meng4411yu/article/details/8668625
[底層] 為什麼Integer.MIN_VALUE-1會等於Integer.MAX_VALUE