數的機器碼錶示(原碼,反碼,補碼,移碼)

1. 機器數和真值

二進制數有正負之分,如N1=+0.101101,N2=-0.101101,則N1是個正數,N2是個負數。機器不能直接把符號“+”、“-”表示出來,爲了能在計算機中表示正負數,必須引入符號位,即把正負符號也用1位二進制數碼來表示。把符號位和數值位一起編碼來表示相應的數的表示方法包括:原碼、補碼、反碼、移碼等。

爲了便於在計算機中表示,同時又便於與實際值相區分,在此首先引入機器數和真值的概念。

機器數  用二進制數“0”或“1”來表示數的符號,“0”表示正號,“1”表示負號,且把符號位置於該數的最高數值位之前,這樣表示的數稱爲機器數(或稱機器碼),即把符號位和數值位一起編碼來表示的數就是機器數。

真值  一般書寫中用“+”、“-”來表示數的符號,這樣表示的數稱爲真值。

例如:N1 = +0.101101,N2 = -0.101101,這是真值,表示成機器數(以原碼爲例)就是[N1]= 0.101101,[N2] = 1.101101。

機器數有原碼、補碼、反碼和移碼四種表示形式。下面以整數爲例說明原碼、補碼、反碼和移碼的表示方法。

2. 原碼

符號位爲0表示正數,爲1表示負數,數值部分用二進制數的絕對值表示的方法稱爲原碼錶示法,通常用[X]表示X的原碼。

例如,要表示+59和-59的原碼。假設機器數的位數8位(即機器的字長爲8位),最高位是符號位,其餘7位是數值位,那麼,+59和-59的原碼分別表示爲:

[+59]=00111011                  [-59]=10111011

寫成一般式則爲:

正數的原碼         [X]=X             (0<X<2n-1)

負數的原碼         [X]=2n-1-X       (-2n-1<X<0)

注意:0的原碼有兩個值,有“正零”和“負零”之分,機器遇到這兩種情況都當作0處理。

[+0]=00000000                    [-0]=10000000

原碼的表示方法簡單易懂,與真值轉換方便,但在進行加減法運算時,符號位不能直接參加運算,而是要分別計算符號位和數值位。當兩數相加時,如果是同號,則數值相加;如果是異號,則要進行減法運算。而在進行減法運算時,還要比較絕對值的大小,然後用大數減去小數,最後還要給運算結果選擇恰當的符號。

爲了解決這些問題,人們引進了數的補碼錶示法。

3. 補碼

什麼是補碼?我們先用日常生活中的實例來進行說明。假如現在時間是7點,而你的手錶卻指向了9點,如何調整手錶的時間?有兩種方法撥動時針,一種是順時針撥,即向前撥動10個小時;另一種是逆時針撥,即向後撥2個小時。從數學的角度可以表示爲:

(9+10) -12=19-12=7

或 9-2=7

可見,對鐘錶來說,向前撥10個小時和向後撥2個小時的結果是一樣的,減2可以用加10來代替。這是因爲鐘錶是按12進位的,12就是它的“模”。對模12來說,-2與+10是“同餘”的,也就是說,-2與+10對於模12來說是互爲補數的。

計算機中的加法器是以2n爲模的有模器件,因此可以引入補碼,把減法運算轉換爲加法運算,以簡化運算器的設計。

補碼的定義:把某數X加上模數K,稱爲以K爲模的X的補碼。

[X]=K+X

因此,正數的補碼的最高位爲符號“0”,數值部分爲該數本身;負數的補碼的最高位爲符號“1”,數值部分爲用模減去該數的絕對值。

通過用模2n減去某數的絕對值的方法來求某數的補碼比較麻煩,求一個二進制數的補碼的簡便方法是:正數的補碼與其原碼相同;負數的補碼是符號位不變,數值位逐位取反(即求其反碼),然後在最低位加1。

例如,[+59]=[+59]=00111011,而[-59]=10111011,因此,[-59]= 11000100+1 = 11000101。

注意:0的補碼只有一種形式,就是n位0。

採用補碼錶示法進行加減法運算,比原碼運算方便多了,符號位可以和數值位一起參加運算,而且不論數是正還是負,計算機總是做加法,減法運算可轉換爲加法運算。

4. 反碼

引入反碼的目的是便於求負數的補碼。

正數的反碼與原碼相同,負數的反碼是符號位不變,數值位逐位取反。

例如:[+59]=[+59]=00111011,而[-59]=10111011,因此,[-59]=11000100。

注意:0的反碼也有兩個,[+0]=00000000,[-0]=11111111

在計算機中,求一個數的反碼很容易,因此,求一個數的補碼也就易於實現。

採用補碼運算,計算機的控制線路較爲簡單,所以,目前大多數計算機均採用補碼存儲、補碼運算,其運算結果仍爲補碼形式。

綜上所述,在n位機中,用n位二進制數補碼錶示一個帶符號的整數時,最高位爲符號位,後面n-1位爲數值部分。n位二進制數補碼錶示的範圍爲-2n-1~+2n-1-1。例如,在8位機中,補碼錶示的範圍爲-128~+127。

表2-2列出了8位二進制數碼在各種表示形式下的對應真值。

表2-2  8位二進制數的各種表示方法

213.gif

5)移碼

移碼也稱爲增碼或偏碼,常用於表示浮點數中的階碼。

移碼可由補碼求得,只要把補碼的符號位取反就得到了移碼。


轉載自:http://share.onlinesjtu.com/mod/tab/view.php?id=173

發佈了17 篇原創文章 · 獲贊 31 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章