原碼(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):求負數-p的補碼n:正數和0的補碼就是該數字本身的原碼;
負數的補碼 = 2^n – 它的相反數,
即n = 2^n – p。
假設負數-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 其實機器並不知道...