int最大值+1爲何是-2147483648最小值-1爲何是2147483647

今天一個新手學編程就問到這個問題,不少人第一次學編程確定會遇到這個問題,大部分都知道是溢出之類的,用源碼和補碼就很容易說明編程

int i = -2147483648 ;這是不容許的 VS裏報的錯 error C4146 : 一元負運算符應用於無符號類型,結果仍爲無符號類型錯誤,spa

那麼咱們就會想,若是非要用int存 -2147483648那麼符號位和數據位共用, int的第一位二進制是符號位0是整數,1是負數源碼

-2147483647 原碼1111 1111 1111 1111 1111 1111 1111 1111ast

-2147483647-1=-2147483648;二進制

因爲cpu裏面存的是補碼計算im

-2147483647  補碼1000 0000  0000 0000 0000 0000 0000 0001error

-1       補碼1111 1111 1111 1111 1111 1111 1111 1111新手

獲得-2147483648 補碼1000 0000 0000 0000 0000 0000 0000 0000cpu

-2147483648-1獲得2147483647;數據

-2147483648 補碼1000 0000 0000 0000 0000 0000 0000 0000

-1      補碼1111 1111 1111 1111 1111 1111 1111 1111

獲得     補碼0111 1111 1111 1111 1111 1111 1111 1111

正好是2147483647 最大值

2147483647+1獲得-2147483648;

2147483647 補碼0111 1111 1111 1111 1111 1111 1111 1111

1      補碼0000 0000 0000 0000 0000 0000 0000 0001

獲得      補碼1000 0000 0000 0000 0000 0000 0000 0000

正好是-2147483648最小值

相關文章
相關標籤/搜索