原碼 反碼 補碼簡單分析

2021-10-09 12:44:00 字數 1171 閱讀 4810

原碼(signed‐magnitude)是一種計算機中對數字的二進位制定點表示方法。原碼表示法在數值前面增加了一位符號位(即最高位(msb)為符號位):正數該位為0,負數該位為1(0有兩種表示:+0和-0),其餘位表示數值的大小。

優點:

簡單直觀;例如,我們用8位二進位制表示乙個數,則+11的原碼為00001011,-11的原碼就是10001011。

缺點:原碼不能直接參加運算,可能會出錯。

例如數學上,1+(-1)=0,而在二進位制中00000001+10000001=10000010,換算成十進位制為-2。

原碼的問題就在於乙個數加上他的相反數不等於零。

所以原碼的符號位不能直接參與運算,必須和其他位分開,這就增加了硬體的開銷和複雜性。

反碼(1』s complement):正數的反碼等於原碼;負數的反碼就是它的相反數的每一位取反。

比如:-1的4位二進位制為1110

優點:

解決了「互為相反數相加等於0」

0001+1110=1111 (1+(-1)= - 0)

缺點兩個負數相加的出錯了

1110(-1)+1101(-2)=1011(-4)

1110(-1)+1100(-3)=1010(-5)

補碼(2』s complement):

正數和0的補碼就是該數字本身的原碼;

負數的補碼 = 2^n – 它的相反數,

即n = 2^n – p。

求負數-p的補碼n:

假設負數-p的n位補碼n,由定義知:

n = 2^n – p = (11…1) b + (00…01)b – p =(11…1) b – p+ (00…01)b = p的所有位取反 + 1

即負數的補碼等於它的反碼+1

已知負數-p的補碼n,求該負數的十進位制:

先求該負數-p的相反數p,p = 2^n – n = (11…1) b – n+ (00…01)b = n的所有位取反 + 1

則該負數的十進位制 = p的十進位制 乘以 (-1)

優點解決了兩個負數相加出錯的問題

1111 + 1110 = 1101 即-1 + -2 = -3

原碼 反碼 補碼分析

反碼 正數 反碼和原碼相同 負數 最高位為符號位為1,其餘位原碼取反 補碼 正數 原碼 反碼和補碼相同 負數 最高位符號位為1,其餘位為原碼取反,在對整個書加1 計算機中原碼用於表示有符號的正數和無符號整數 ex int x 1 在記憶體中十六進製制的表示方式為 0000 00001 0000 00...

原碼 補碼和反碼分析

補碼是為了解決計算機的減法問題,計算的本質是取模。計算機只有加法運算器,沒有減法,所以引入符號位,例1001表示 1 注 從硬體的角度上看,只有正數加負數才算減法。正數與正數相加,負數與負數相加,其實都可以通過加法器直接相加。2.引入符號位後會出現問題 因為要用負數表示減法,所以這裡符號位也有參與運...

補碼原碼反碼簡單理解

看到一句i2s的data是以補碼形式來表現資料。再次查閱得出以下只管結論 1,首先直觀舉例機器裡面是如何存放有符號數的 1在機器裡面表示為 0000 0001h 0在機器裡面表示為 0000 0000h 1在機器裡面表示為1111 1111h 2在機器裡面表示為1111 1110h 其實機器並不知道...