補
碼在進行數值比較的時候比較麻煩,因為把補碼的符號部分與數值部分統一看成數值的話,則負數補碼的值大於正數補碼的值。為了比較數值大小方便又提出了移碼的概念。
移碼的定義:
ü 純小數:-1<=x<1,x移碼=1+x;
ü 純整數:-2^(n-1)<=x<2^(n-1),x移碼=2^(n-1)+x。
根據移碼的定義可知,移碼是把真值在數軸上正向平移1(純小數)或者2^(n-1)(純整數)後得到的,所以移碼也被稱為增碼或餘碼。移碼的實質是把真值映像到乙個正數域,因此移碼的大小可以直觀的反映真值的大小。這樣採用移碼表示時,不管真值的正負,均可以按無符號數比較大小。
例4-1:補碼與移碼的關係:
純小數:
ü 0<=x<1時,[x]補碼=x,[x]移碼=1+x=1+[x]補碼;
ü -1<=x<0時,[x]補碼=2+x,[x]移碼=1+x=1+[x]補碼-2=[x]補碼-1。
純整數:
ü 0<=x<2^(n-1)時,[x]補碼=x,[x]移碼=2^(n-1)+x=2^(n-1)+[x]補碼;
ü -2^(n-1)<=x<0時,[x]補碼=2^n+x,[x]移碼=2^(n-1)+x=2^(n-1)+[x]補碼-2^n
=[x]補碼-2^(n-1)
綜上,移碼與補碼數值部分相同,符號位相反,因此若已知[x]補碼,只需將[x]補碼的符號位取反,數值部分不變,即可得到[x]反碼,反之亦然。
注:補碼的計算,一般計算可以根據定義,先求出增加後的真值,在將真值轉換成無符號的二進位制數。後面在介紹浮點數的時候我們還會接觸到移127碼,即將原值增加127,它的計算方法可以採用[[x]真值+127]無符號二進位制數。如果已知了x的補碼,我們也可以由補碼與移碼之間的關係直接求得。
例4-2:求下列各數的補碼和移碼,1011010、-1011010。
ü [1011010]補碼=01011010 [1011010]移碼=11011010
ü [-1011010]補碼=10100110 [-1011010]補碼=00100110
例4-3:真值0的反碼表示、移碼的表示範圍。
真值0的移碼表示只有一種形式:[+0]移碼=[-0]移碼=100…0。無論是由移碼的定義,還是由移碼與補碼的關係都可以證明。
移碼的表示範圍與補碼相同,純小數的移碼可以表示到真值-1,[-1]移碼=0.00…0;純整數的移碼可以表示到真值-2^(n-1),[-2^(n-1)]移碼=000…0。
例4-4:設某計算機的字長為8位,求真值-73在各碼制下的表現形式。
真值=-73
原碼=11001001
補碼=10110111
反碼=10110110
移碼=00110111
計算機中如何表示數字 04反碼
反碼的實質是一種特殊的補碼,其特殊之處在於反碼的模比補碼的模小乙個最低位上的1。反碼的定義 純小數 0 x 1時,x的反碼是其自身 1 0,則使符號位為0,數值部分與x相同,即可得到x反 若x 0,則使得符號位為1,x的數值部分各位取反,即可得到x反。例4 1 已知x原碼 x補碼,求x反碼。x原碼 ...
負數在計算機中如何表示?
負數在計算機中如何表示?舉例來說,8在計算機中表示為二進位制的1000,那麼 8怎麼表示呢?很容易想到,可以將乙個二進位制位 bit 專門規定為符號位,它等於0時就表示正數,等於1時就表示負數。比如,在8位機中,規定每個位元組的最高位為符號位。那麼,8就是00001000,而 8則是10001000...
負數在計算機中如何表示?
為什麼要使用2的補碼 two s complement 形式儲存負數?反碼舉例來說 8在計算機中表示為二進位制的1000,那麼 8怎麼表示呢?可以將乙個二進位制最高位 bit 專門規定為符號位,它等於0時就表示正數,等於1時就表示負數。比如,在8位機中,規定每個位元組的最高位為符號位。那麼,8就是0...