今天一個新手學編程就問到這個問題,很多人第一次學編程肯定會遇到這個問題,大部分都知道是溢出之類的,用源碼和補碼就很容易說明
int i = -2147483648 ;這是不允許的 VS里報的錯 error C4146 : 一元負運算符應用於無符號類型,結果仍為無符號類型錯誤,
那么我們就會想,如果非要用int存 -2147483648那么符號位和數據位共用, int的第一位二進制是符號位0是整數,1是負數
-2147483647 原碼1111 1111 1111 1111 1111 1111 1111 1111
-2147483647-1=-2147483648;
由於cpu里面存的是補碼計算
-2147483647 補碼1000 0000 0000 0000 0000 0000 0000 0001
-1 補碼1111 1111 1111 1111 1111 1111 1111 1111
得到-2147483648 補碼1000 0000 0000 0000 0000 0000 0000 0000
-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最小值