1. 程式人生 > >為什麽int的最小值絕對值比最大值大1

為什麽int的最小值絕對值比最大值大1

符號 32位 第一個 思路 www 原來 參與 計算 根據

轉載自 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

=-2^31 + 1. 這應該是正常思路看待int的最大值和最小值的場景.但是我們還有一個-0沒有解決,我們按照之前定義的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