C語言學習【5】-補碼

計算機內存儲整數都是用的補碼。

已知十進制求二進制

  • 求正整數的二進制

        除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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章