【計算機基礎】整數的補碼錶示及負整數的左右移

作者:LogM
本文原載於 https://segmentfault.com/u/logm/articles ,不允許轉載~

文章難免有錯誤之處,請在原文評論處指出~

1. 補碼的表示形式

計算機中整數用補碼錶示。

舉例:假設數值類型爲char型(8位)

十進制:8
原碼:0000 1000
補碼:0000 1000(正數的補碼等於原碼)
十進制:-8
原碼:1000 1000
反碼:1111 0111
補碼:1111 1000(負數的補碼等於反碼加1)

2. 爲什麼用補碼錶示

用補碼錶示是爲了使計算機的整數加法能用同一種電路完成,無論是正整數還是負整數。

建議閱讀:LeetCode習題:位運算實現整數加法

3. 補碼的本質

以-8爲例:

十進制:-8
補碼:1111 1000

可以發現,-8的補碼與248的二進制表示竟然相同。

十進制:248
二進制:1111 1000

這是巧合嗎?

char型共8位,所以有:

$$ 2^8 + (-8) = 248 $$

可能我解釋不夠清楚,小夥伴們可以自己用谷歌檢索答案。

4. 負數的左右移

  • 左移:不斷在右邊補0,符號位會被移出,全移完是0
  • 右移:不斷在左邊補1,全移完是-1的補碼
  • 觀察可知:負數的右移不再嚴格對應整數除法的除2
十進制:-8
補碼:1111 1000
左移後的補碼:1111 0000(十進制-16)
右移後的補碼:1111 1100(十進制-4)

十進制:-5
補碼:1111 1011
左移後的補碼:1111 0110(十進制-10)
右移後的補碼:1111 1101(十進制-3,而整數除法的除2結果爲-2,兩者不對應)
發佈了52 篇原創文章 · 獲贊 19 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章