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