原碼,反碼與補碼

 

1、原碼、反碼和補碼的表示方法 


(1)    原碼:在數值前直接加一符號位的表示法。

例如:      符號位  數值位

[+7]原=   0    0000111  B

[-7]原=   1    0000111  B

     注意:a. 數0的原碼有兩種形式

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

           b. 8位二進制原碼的表示範圍:-127~+127

(2)反碼:

     正數:正數的反碼與原碼相同。

     負數:負數的反碼,符號位爲“1”,數值部分按位取反。

例如:     符號位 數值位

     [+7]反=  0   0000111  B

     [-7]反=  1   1111000  B

注意:a. 數0的反碼也有兩種形式,即

         [+0]反=00000000B

         [- 0]反=11111111B

      b. 8位二進制反碼的表示範圍:-127~+127

(3)補碼的表示方法

12)補碼的表示:

    正數:正數的補碼和原碼相同。

    負數:負數的補碼則是符號位爲“1”,數值部分按位取反後再在末位(最低位)加1。也就是“反碼+1”

例如:       符號位 數值位

      [+7]補=   0   0000111  B

      [-7]補=   1   1111001  B

補碼在微型機中是一種重要的編碼形式,請注意:

a.             採用補碼後,可以方便地將減法運算轉化成加法運算,運算過程得到簡化。正數的補碼即是它所表示的數的真值,而負數的補碼的數值部份卻不是它所表示的數的真值。採用補碼進行運算,所得結果仍爲補碼。

b.            與原碼、反碼不同,數值0的補碼只有一個,即       [0]補=00000000B。

c.             若字長爲8位,則補碼所表示的範圍爲-128~+127;進行補碼運算時,應注意所得結果不應超過補碼所能表示數的範圍。

2.原碼、反碼和補碼之間的轉換

由於正數的原碼、補碼、反碼錶示方法均相同,不需轉換。

在此,僅以負數情況分析。

(1)    已知原碼,求補碼。

例:已知某數X的原碼爲10110100B,試求X的補碼和反碼。

解:由[X]原=10110100B知,X爲負數。求其反碼時,符號位不變,數值部分按位求反;求其補碼時,再在其反碼的末位加1。

1  0  1  1  0  1  0  0   原碼



1  1  0  0  1  0  1  1   反碼,符號位不變,數值位取反

                     1   +1

1  1  0  0  1  1  0  0   補碼

故:[X]補=11001100B,[X]反=11001011B。

(2)    已知補碼,求原碼。

分析:按照求負數補碼的逆過程,數值部分應是最低位減1,然後取反。但是對二進制數來說,先減1後取反和先取反後加1得到的結果是一樣的,故仍可採用取反加1 有方法。

例:已知某數X的補碼11101110B,試求其原碼。

解:由[X]補=11101110B知,X爲負數。求其原碼錶示時,符號位不變,數值部分按位求反,再在末位加1。

1  1  1  0  1  1  1  0   補碼



1  0  0  1  0  0  0  1   符號位不變,數值位取反

                     1   +1

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