計算機中定點數表示方法——補碼

(1)模的概念
假設兩位十進制數計算:
• 77 — 38 = ?
• 77 + 62 = 139
77 — 38 = 77 + 62 = 39 (mod 100)
由此可以看出,減38和加62是等價的,前提是說對模爲100是正確的。這個100在數學上稱爲模數

模的概念:
計算機中運算器、寄存器、計數器都有一定的位數,不可能容納無限大的任意數。當運算結果超出實際的最大表示範圍,就會發生溢出,此時所產生的溢出量就是模(module)。
因此,可以把模定義爲一個計量器的容量。如:一個4位的計數器,它的計數值爲0–15。當計數器計滿15之後再加1,這個計數器就發生溢出,其溢出量爲16,也就是模等於16。
• 定點小數的溢出量爲2,即以2爲模;
• 一個字長爲n+1位的定點整數的溢出量爲2^(n+1)
即以2^(n+1)爲模。

定義:任意一個數X的補碼記爲在這裏插入圖片描述

在這裏插入圖片描述

(2)定點小數
若定點小數的補碼形式爲 x0. x1 x2 ··· xn,則補碼錶示的定義是:
在這裏插入圖片描述

例: x = +0.1011, 則 [x]補=0.1011
x = -0.1011, 則 [x]補=10+ x = 10.0000-0.1011= 1.0101
對於0,[+0]補=[-0]補=0.0000  (mod 2)
注意:0的補碼錶示只有一種形式。

(3)定點整數
若定點整數的補碼形式爲 x0 x1 x2 ··· xn,則補碼錶示的定義是:
在這裏插入圖片描述
例: x = +0111, 則 [x]補=00111
x = -0111 , 則 [x]補=2^(4+1) – |-0111|=100000 – 0111=11001

(4)補碼的表數範圍
n+1位補碼整數: 2^n -1 ----2^n
n+1 位補碼小數: 1- 2^(-n) ------ - 1
若補碼整數的位數是8位,其表示的最小值、最大值:-128 – 127
若補碼小數的位數是8位,其表示的最小值、最大值: -1 – 1- 2^(-7) 即 -1 – 127/128

(5)結論
①補碼最高一-位爲符號位,0正1負;
②補碼零有唯一編碼;
③補碼能很好用於加減運算。1
④補碼滿足 [-x]補+ [x]補=0 例如:[+7]補=00111 [-7]補=11001
⑤最高位參與演算,與其它位一樣對待。
⑥擴展方便。5位的補碼擴展爲8位 00111 --> 00000111 11001 --> 11111001
⑦算術移位。假設 [x]補= x0. x1 x2 ··· xn [x/2]補= x0. x0 x1 x2 ··· xn-1
⑧最大的優點就是將減法運算轉換成加法運算.
[X+Y]補= [X]補+[Y]補 [X - Y]補 = [X]補+ [-Y]補

例如: X=(11)10進制=(1011)2進制 Y=(5)10進制=(0101)2進制 已知字長n=5位
[X]補+ [-Y]補=01011+11011=100110=00110=(6)10 注: 最高1位已經超過字長故應丟掉
[X - Y]補= [0110]補=00110

(6)補碼編碼的簡便方法
正數的補碼在其二進制代碼前加上符號位0;
負數的補碼是將二進制代碼前加0後,再全部按位取反,然後在最低位上加1。

例 設x=1010,y=-1010,求[x]補和[y]補。
解:根據補碼的編碼方法,正數的補碼與它的二進制表示相同,所以加上符號位0後得
[x]補=01010
負數的補碼的編碼方法
1)將二進制代碼前加零 0 1 0 1 0
2)再全部按位取反 1 0 1 0 1
3)然後在最低位上加一 1 0 1 1 0
得到 [y]補=10110

(7)原碼與補碼之間的轉換
①已知原碼求補碼正數 [X]補=[X]原
負數 符號除外,各位取反,末位加1 (注意該說法與前面的補碼編碼簡便方法的說法有所不同)

例:X= -1001001
[X]原=11001001
[X]補=10110110+1=10110111
驗證:[X]補= 2^(7+1) +X=100000000-1001001= 10110111
在這裏插入圖片描述

②由[X]補求[-X]補

運算過程是:將[X]補連同符號一起將各位取反,末位再加1。
例:設字長爲8位
X= +100 1001
[X]補 = 0100 1001
各位取反 1011 0110
末位再加1 1011 0111
即: [-X]補= 1011 0111

③補碼與真值之間的轉換

  • 求值方法 x=-x02^n+
    x1
    2^(n-1)…+xn-1*2+xn

例如: 1000 0100 的真值爲-128+4=-124 ,

  • 補碼:符號位爲“1”----負,餘下求補爲數值部分 ; 符號位爲“0”----正,餘下爲數值部分

例:[X]補 = 0100 1001 X= 0100 1001
例:[X]補 = 1000 0000 X=-1000 0000B =-80H =-128

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