REF://http://web2.tcssh.tc.edu.tw/teacher/cjwu/class/complement.htm
補數 補數(Complement):是指兩數字加起來等於某數時,則二數互為某數的補數。
例如3的10補數為7,7的10補數為3。
二進位系統有
1的補數(1‘ Complement)
2的補數(2’ Complement)
1的補數(1‘ Complement):指兩數的和為1,則此兩數互為1 的補數,即1和0互為1的補數。
即將原數的0變1,1變0
原數為 | 1 | 0 | 1 | 1 | 0 | 1 |
1補數為 | 0 | 1 | 0 | 0 | 1 | 0 |
2的補數(2’ Complement):指二兩數的和使每一位均為0而產生溢位(進位)。
先取該數的1補數,再加1即可
原數為 | 0 | 1 | 1 | 0 | 1 |
1補數為 | 1 | 0 | 0 | 1 | 0 |
1的補數再加1 | 1 | 0 | 0 | 1 | 1 |
10進制->2進制,正數不必要轉補數,負數才須要轉補數。
正數由10進制 -> 2進制時不必轉成補數,因為電腦並沒有另一個符號可以用來代表負號,而是採用 [補數] 來讓加法器做減法運算。
所以負數由10進制 -> 2進制時,則須要轉成補數。而在補數系統裡是將 MSB (最左邊的位元),表示符號位元,剩下的位元才拿來算值,
但是將 MSB 視為區別到底「此數為正數」還是「此數為某數的某種補數」來看二進位比較容易看懂。
如在[1's 補數系統]裡則為「此數為某數的1的補數」,在[2's 補數系統]裡則為「此數為某數的2的補數」。
參考下表 (以8位元為例)。
---------------------------------------------------------------
1's 補數系統 十進位數 2's 補數系統
---------------------------------------------------------------
01111111 +127 01111111
---------------------------------------------------------------
: : :
---------------------------------------------------------------
00000001 +1 00000001
---------------------------------------------------------------
00000000 +0 00000000
---------------------------------------------------------------
11111111 -0 00000000
---------------------------------------------------------------
11111110 -1 11111111
---------------------------------------------------------------
: : :
---------------------------------------------------------------
10000000 -127 10000001
---------------------------------------------------------------
無 -128 10000000
---------------------------------------------------------------
從上表應可觀察到:是遇到 [負數] 才要將值轉為 [補數] 的喔。
問:再1跟2補數時 最左邊不都代表正負嗎?誰能給我1補數(正負之間),2補數(正負之間),1跟2補數之間的轉換規律?
-- 無所謂 "1跟2補數之間的轉換規律",只有「2的補數 = 1的補數加 1」。
重複一句話:補數系統裡是將 MSB (最左邊的位元),表示符號位元,剩下的位元才拿來算值,是負數才須要轉補數。
將 MSB 符號位元視為區別到底「此數為正數」還是「此數為某數的某種補數」。
留言列表