為什麽int的最小值絕對值比最大值大1
阿新 • • 發佈:2019-02-02
符號 32位 第一個 思路 www 原來 參與 計算 根據 =-2^31 + 1. 這應該是正常思路看待int的最大值和最小值的場景.但是我們還有一個-0沒有解決,我們按照之前定義的
轉載自 https://www.jianshu.com/p/23a6e3a1098e
關於int取值範圍的疑問
在Java中int是占4個字節的,意味著它是32位。同時int是有符號的,那就說它最高位不計算在內,可以得出MAX_INT
= 01111111111111111111111111111111 恰好等於 2^31 -1
說法1:
MAX_INT
+ 1 = 100000000000000000000 根據int有符號的定義,第一位是符號位,這樣看來,這個數值就是 -0 ; 那麽我們再來討論這樣一種場景,按照int的第一個位是符號位的說法 MIN_INT
=11111111111111111111111111111111,前面我們計算過 31位的全1 = 2^31 -1, 所以MIN_INT
MIN_INT
來計算一下MIN_INT
-1 = -2^31 + 1 -1 = -2^31. 咦,我們去掉超過的1位,發現它竟然也是 100000000000000000000 和 -0的含義一樣 ,所以我們要解決的-0 可以把原來的MIN_INT
-1 作為新的MIN_INT
! 這樣int的取值範圍就是 -2^31 到 2^31 -1
說法2:
當然,說法1是我發現的一種解釋,網上的解釋是因為負數在計算機中都是以補碼方式存儲的,且沒有任何正數的補碼是 100000000000000000000 ,所以把 -0 看成 int最小值(符號位參與運算).
為什麽int的最小值絕對值比最大值大1