計算機內存儲整數都是用的補碼。
已知十進制求二進制
- 求正整數的二進制
除2取餘,直至商爲0,餘數倒敘排序
- 求負整數的二進制
先求出與該負數相對應的正整數的二進制代碼,然後將所有位取反,末尾加1,不夠位數時,左邊補1【所謂不夠位數就是不滿數據類型的長度,例int i = -3,int爲32bit,而-3的絕對值的二進制代碼爲11,加1後爲100,佔3位,則左邊的28位都補1】
0全是0
已知二進制求十進制
- 如果首位時0,則表明時正整數,按普通換算方法來求
- 如果首位是1,則表明是負數
將所有位取反,末尾加1,所得數字就是該負數的絕對值
- 如果全是0,則對應的十進制數字就是0
輸出結果爲
從上面的結果我們可以看出,在有符號整形變量中,所能存儲的整數範圍是[-32768,32767]。
那爲什麼32767加1後就成了-32768了呢?
根據上面的結論,可以得出
32767 原碼=補碼:0111 1111 1111 1111
加1
1000 0000 0000 0000
因首位是 1,所以可得十進制數爲負數
補碼取反加 1 還是 1000 0000 0000 0000
則絕對值爲32768
因爲首位(符號位)爲1
則1000 0000 0000 0000 = -32768