跳至內容

補數

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

補數complement)是對於給定的進位制,相加後能使自然數 a 的位數增加 1 的最小的數。可以在計算電路中,代替減的操作,而僅僅使用加法器元件(加法器)的「加上的補數(無視最高位的進位)」,達到相同的效果。

定義

[編輯]

b 進制表示自然數 a 至少需要 n 位數字,規定

  • 是      「b 進制數 a 的關於基數的補數b 的補數)」
  • 是「b 進制數 a 的關於減基數的補數b - 1 的補數,簡稱減補數儕補數)」。

例如,十進制自然數 61 關於基數 10 的補數是 。二進制自然數 關於基數 2 的補數是

由定義可以得出,a基數的補數 加上 a,可以得到位數多一位的最小的自然數()。a減基數的補數 加上 a ,可以得到位數不增加的最大的自然數()。

基數 b 在上下文中明確的時候,「在b 進制中」的描述通常被省略。

但是,在基數不明確的情況下,「 的補數」表示的可以是 進制的減基數的補數,也可是 進制的基數的補數,從而產生歧義(這兩者的值不一定是相等的)。例如,僅僅說「9的補數」,無法確定指的是「10進制中的減基數的補數」還是「9進制中的基數的補數」。

在英文中,十進制的基數的補數記為 ten's complement,減基數的補數稱為 nines' complement。二進制中,基數的補數稱為 two's complement,減基數的補數稱為 ones' complement。其他進制也有類似的稱法。一些人,如高德納,建議採用撇號區分。這樣,four's complement指的是四進制中的基數的補數。而fours' complement指的是五進制中的減基數的補數。但是,這並不是普遍的做法,而且在幾乎所有情況下進制是明確的。多數作者寫做 one'snine's complement,一些格式手冊建議採用 onesnines complement,不採用撇號。

計算方法

[編輯]

對於N進制的自然數a,從個位開始的各位數字

規定不能為0。規定的各位為:

bi = (N + 1) + ai

這時,N進制形如的

即稱為「 的關於 的補數」。

10進制的舉例

[編輯]

十進制數 2304671 的補數。由於 9 = 2 + 7 = 3 + 6 = 0 + 9 = 4 + 5 = 6 + 3 = 7 + 2 = 1 + 8 ,令N=9時,自然數2304671對應的補數為 7695328 。 7695328 + 1 = 7695329 ,因此N=10時,自然數2304671對應的補數是 7695329

2進制的舉例

[編輯]

二進制中有 1 + 1 = 0, 1 + 0 = 1,求1的補數只需簡單地將0與1相互替換位元運算中的邏輯非運算)。

二補碼(即二補碼),只需要將1的補數加1。

  • 二進制的 101010110 對應的1的補數是 010101001。
  • 2 的補數是 010101001 + 1 = 010101010。

參考文獻

[編輯]

JIS X 0005:2002 情報処理用語(データの表現) 05.08

Donald E. Knuth 『The Art of Computer Programming Vol. 2 Seminumerical Algorithms Third Ed. 日本語版』 アスキー、2004年、191頁。 (ISBN 4-7561-4543-4)

相關條目

[編輯]