原碼、反碼、補碼和移碼的相互轉換
一、機器數
連同符號位一起數字化的數。
1.特點
①符號數字化
②數值的大小受機器字長的限制。每個機器數所占的二進制位數受限於機器硬件規模,與機器字長有關。超過機器字長的數位要被舍去。
2.真值:機器數中除“+”“-”符號外,其余部分表示的值。
3.分類
①無符號數:機器字長的所有二進制位均表示數值。
②帶符號數:數值部分和符號均為二進制代碼表示,通常符號位位於最高位。符號位“1”表示“-”,“0”表示“+”。
二、原碼
原碼是保持原有的數值部分的形式不變。
整數部分:
當0≤X<2n,[X]原=X [10011001]原 = 010011001
當-2n<X≤0,[X]原=2n-X=2n+|X| [-10011001]原= 110011001
小數部分:
當0 ≤ X<1,[X]原=X [0.10011001]原 = 0.10011001
當-1<X ≤ 0,[X]原=1+|X| [-0.10011001]原= 1.110011001
①將[X]原的符號取反即可得到[-X]原
【例題】設機器字長為8位,寫出+37和-37的二進制。
解析:37除二取余法得到的二進制數為100101,“+”為1,“-”為0,符號位在最高位
[+37]原=(+37)10=(+100101)2=(+00100101)2=00100101
[-37]原=(-37)10=(-100101)2=(-00100101)2=10100101
②原碼中0的表示不唯一
整數原碼:[+0]原=00...0 [-0]原=10...0
小數原碼:[+0]原=0.00...0 [-0]原=1.00...0
③原碼的移位規則:符號位不變,數值部分左移或右移,移出的空位歸0。左移是乘法,右移是除法。移動n位是乘或除2n。
【例子】 [0.0110000]原=0.0110000
[0.0110000]原÷2=0.0011000
[0.0110000]原×2=0.1100000
三、反碼
①反碼與原碼的關系
當X≥0,[X]反=[X]原
當X<0,[X]反=[X]原的位取反(符號位不變)
【例子】
[+0.1001100]反=0.1001100 [-0.1001100]反=1.0110011
[+1001100]反=01001100 [-1001100]反=10110011
②反碼中0的表示不唯一
[+0]反=00...0 [-0]反=11...1
四、補碼
補碼的目的是使得減法也可以按照加法的方式來計算(加減法);同時,補碼可以將數的符號位和數值域采用統一方式處理。
模(mod)的概念:對於某一確定的模,某數減去一個數,可以用加上那個數的負數的補數來替代。
當X ≥ 0,[X]補=(M+X)mod M=X,正數的補數等於其本身。
當X<0,[X]補=(M+X)mod M=M-|X|,負數的補數等於模與該數絕對值之差。
【例子】 (5-2)mod 10=(5+8)mod 10=3,所以當模為10時,-2的補數為8。
①補碼與原碼、反碼的關系
當X ≥ 0,[X]補=[X]反=[X]原
當X<0,[X]補=[X]反+1,[[X]補]補=[X]原
【例子】機器字長為8,求+37和-37的原碼、反碼、補碼
[+37]原=[+37]反=[+37]補=00100101
[-37]原=10100101
[-37]反=11011010
[-37]反=11011011
②補碼中0的表示是唯一的
[+0]補=00000000 [-0]補=00000000
③補碼的表數范圍比原碼大
五、移碼
移碼也稱為增碼、余碼,主要用於表示浮點數的階碼,因此一般表示整數。
純整數移碼:[X]移=2n+X -2n≤X<2n
純小數移碼:[X]移=1+X -1≤X<1
①移碼與補碼的關系:整數補碼的數值部分不變,符號取反即得整數移碼。反之亦然。
當X≥0,[X]移=[X]補+2n
當X<0,[X]移=[X]補-2n
【例1】
[+1101010]補 = 01101010
[+1101010]移 = 11101010
[-1101010]補 = 10010110
[-1101010]移 = 00010110
【例2】在字長為8位的機器中,[X]移=27+X
若X=+1100101 ,則[X]移=27+1100101=10000000+1100101=11100101
若X=-1100101 ,則[X]移=27+(-1100101)=10000000-1100101=00011011
【例3】求+12和-3的8位移127碼的二進制編碼形式
(+12)10=1100,[+12]移127碼=127+12=(139)10=(1111111+1100)2=(10001011)2
(-3)10=-11,[-3]移127碼=127-3=(124)10=(1111111-11)2=(01111100)2
②移碼中0的表示是唯一的
純整數:[+0]移=[-0]移=10000000
③移碼的表數范圍與補碼一致