爲什麼計算機內存數值存儲方式是補碼?

爲什麼計算機內存數值存儲方式是補碼?


首先我們得先把源碼、反碼、補碼的概念搞清楚,然後對比三碼的區別,再總結爲什麼計算機內存數值存儲方式是補碼。

1. 原碼

一個數的原碼(原始的二進制碼)有如下特點:

  • 最高位做爲符號位,0表示正,爲1表示負
  • 其它數值部分就是數值本身絕對值的二進制數
  • 負數的原碼是在其絕對值的基礎上,最高位變爲1

下面數值以1字節的大小描述:

十進制數 原碼
+15 0000 1111
-15 1000 1111
+0 0000 0000
-0 1000 0000

原碼錶示法簡單易懂,與帶符號數本身轉換方便,只要符號還原即可,但當兩個正數相減或不同符號數相加時,必須比較兩個數哪個絕對值大,才能決定誰減誰,才能確定結果是正還是負,所以原碼不便於加減運算。

2. 反碼

  • 對於正數,反碼與原碼相同
  • 對於負數,符號位不變,其它部分取反(1變0,0變1)
十進制數 反碼
+15 0000 1111
-15 1111 0000
+0 0000 0000
-0 1111 1111

反碼運算也不方便,通常用來作爲求補碼的中間過渡。

3. 補碼

補碼特點:

  • 對於正數,原碼、反碼、補碼相同
  • 對於負數,其補碼爲它的反碼加1
  • 補碼符號位不動,其他位求反,最後整個數加1,得到原碼
十進制數 補碼
+15 0000 1111
-15 1111 0001
+0 0000 0000
-0 0000 0000

4. 補碼的意義

示例1:用8位二進制數分別表示+0和-0

十進制數 原碼
+0 0000 0000
-0 1000 0000
十進制數 反碼
+0 0000 0000
-0 1111 1111

不管以原碼方式存儲,還是以反碼方式存儲,0也有兩種表示形式。爲什麼同樣一個0有兩種不同的表示方法呢?
但是如果以補碼方式存儲,補碼統一了零的編碼:

十進制數 補碼
+0 0000 0000
-0 10000 0000 由於只用8位描述,最高位1丟棄,變爲0000 0000

示例2:計算9-6的結果
以原碼方式相加:

十進制數 原碼
9 0000 1001
-6 1000 0110

在這裏插入圖片描述
結果爲-15,不正確。
以補碼方式相加:

十進制數 補碼
9 0000 1001
-6 1111 1010

在這裏插入圖片描述
最高位的1溢出,剩餘8位二進制表示的是3,正確。

在計算機系統中,數值一律用補碼來存儲,主要原因是

  • 統一了零的編碼
  • 將符號位和其它位統一處理
  • 將減法運算轉變爲加法運算
  • 兩個用補碼錶示的數相加時,如果最高位(符號位)有進位,則進位被捨棄
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章