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 符號位元視為區別到底「此數為正數」還是「此數為某數的某種補數」。

 

arrow
arrow
    全站熱搜

    BB 發表在 痞客邦 留言(1) 人氣()