反碼

存儲數值的定點數表示法

在計算機內,定點數有3種表示法:原碼、反碼和補碼。反碼是數值存儲的一種,但是由於補碼更能有效表現數字在計算機中的形式,所以多數計算機都不採用反碼錶示數。

表示方法


定點整數表示方法
定點整數表示方法

原碼

(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)補碼的表示方法
1)模的概念:把一個計量單位稱之為模或模數。例如,時鐘是以12進位進行計數循環的,即以12為模。在時鐘上,時針加上(正撥)12的整數位或減去(反撥)12的整數位,時針的位置不變。14點鐘在捨去模12后,成為(下午)2點鐘(14=14-12=2)。從0點出發逆時針撥10格即減去10小時,也可看成從0點出發順時針撥2格(加上2小時),即2點(0-10=-10=-10+12=2)。因此,在模12的前提下,-10可映射為+2。由此可見,對於一個模數為12的循環系統來說,加2和減10的效果是一樣的;因此,在以12為模的系統中,凡是減10的運算都可以用加2來代替,這就把減法問題轉化成加法問題了(註:計算機的硬體結構中只有加法器,所以大部分的運算都必須最終轉換為加法)。10和2對模12而言互為補數。
同理,計算機的運算部件與寄存器都有一定字長的限制(假設字長為8),因此它的運算也是一種模運算。當計數器計滿8位也就是256個數後會產生溢出,又從頭開始計數。產生溢出的量就是計數器的模,顯然,8位二進位數,它的模數為2^8=256。在計算中,兩個互補的數稱為“補碼”。
2)補碼的表示:
正數:正數的補碼和原碼相同。
負數:負數的補碼則是符號位為“1”。並且,這個“1”既是符號位,也是數值位。數值部分按位取反后再在末位(最低位)加1。也就是“反碼+1”。
例如:符號位 數值位
[+7]補= 0 0000111 B
[-7]補= 1 1111001 B
補碼在微型機中是一種重要的編碼形式,請注意:
a. 採用補碼后,可以方便地將減法運算轉化成加法運算,運算過程得到簡化。正數的補碼即是它所表示的數的真值,而負數的補碼的數值部份卻不是它所表示的數的真值。採用補碼進行運算,所得結果仍為補碼。
b. 與原碼、反碼不同,數值0的補碼只有一個,即 補=00000000B。
c. 若字長為8位,則補碼所表示的範圍為-128~+127;進行補碼運算時,應注意所得結果不應超過補碼所能表示數的範圍。