int最大值+1為什么是-2147483648最小值-1為什么是2147483647


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

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最小值

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM