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

2021-06-13 01:25:17 字數 2607 閱讀 1169

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位二進位制數的各種表示方法

5)移碼

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

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

數的機器碼表示 原碼 反碼 補碼 移碼

首先區分兩個概念 真值與機器碼 為了解決在計算機內部數的正 負符號和小數點運算問題,而產生了把符號位和數值位一起編碼來表示相應的數的表示方法,如原碼,反碼,補碼,移碼 1.原碼正數 0 二進位制數 負數 1 二進位制數2.反碼正數 0 二進位制數 負數 1 二進位制數按位取反3.補碼正數 0 二進位...

機器碼的表示 原碼 反碼 補碼 移碼

今天做筆試題時遇到的乙個小問題 在機器碼的表示方法中,有哪些方法對0的表示方式是唯一的?毫不猶豫的選擇了補碼。後來發現我錯了,居然還有移碼這個東東。到目前為止,我們學習了十進位制 二進位制 八進位制 十六進製制等用來代表實際數值的數,稱為真值,這些數我們再日常生活中都會使用到,那麼在計算機中數值是怎...

機器碼的原碼,反碼,補碼,移碼介紹

數的機器碼表示有原碼,反碼,補碼,移碼。三者的關係如下 原碼 原碼就是數值二進位制本身,第一位表示符號位,正數符號位為0,負數的符號位為1,例 當x 100 10 x 的原碼為 x 原 01100100,當x 100 10 時,x 的原碼為 x 原 11100100,反碼 正數的反碼 原碼,負數的反...