2010-04-09 110 views
20

我知道無符號,2的補的補,並簽署幅度,以及它們之間的區別,但我很好奇的是:補,爲什麼叫「兩節」

  1. 爲什麼它被稱爲兩個(或一個)補碼,那麼是否有更廣義的補碼?
  2. 這些天才在哪個方面演繹出這樣一種自然的方式來表示負數?
+3

「的二進制數的二進制補碼被定義爲通過從一個大的功率的2減去數而得到的值」 - http://en.wikipedia.org/wiki/Two's_complement – Ben 2010-04-09 00:16:30

回答

27

兩個補出來時,有人意識到減去01,讓rollunder實際上是由符號算術簡單,因爲沒有特殊的檢查都要做檢查,如果數字爲負或不比特「走出負面」 。其他解決方案會給您在-10之間的不連續性。唯一帶有兩個補碼的奇怪之處在於,你的範圍中會多出一個負數,而不是正數。但是,然後,其他解決方案會給你奇怪的東西,如+0-0

根據維基百科,這個名字本身來自數學,它的基礎是當你的數字有限時,減法變得更簡單。該系統實際上是一個「基數補充」,並且由於二進制是基數二,所以這變成了「二補」。事實證明,「補數」被命名爲「減小的基數補數」,即基數減1。如果你看這個十進制數,名字背後的含義更有意義。

Method of Complements (Wikipedia)

+1

剩下的唯一要補充的是,就像CPU寄存器具有固定的位數一樣,推廣到基數N,你必須在固定的數字位數內工作。 – JustJeff 2010-04-09 01:00:59

7

你可以做同樣的事情在其他基地。用十進制數,你會得到9的補碼,其中每個數字X被9-X取代,而數字10的補碼是9的補碼加1。然後,您可以通過添加10的補碼來進行相減,假設有固定的數字位數。

一個實例 - 在一個4位系統,給出的減法

0846 
-0573 
=0273 

首先找到9的補的573,其是9-0 9-5 9-7 9-3或9426
的573 10的補是9426 + 1,或9427
現在添加10的補充和扔掉任何執行的4位

0846 
    +9427  .. 10's complement of 573 
= 10273  .. toss the 'overflow' digit 
= 0273  .. same answer 

顯然,這是一個簡單的例子。但是這個比喻帶有。有趣的是4位十進制補碼中最負的值? 5000!

至於詞源,我推測術語1的補碼是相同意義上的補充,因爲從幾何的互補角度是90度減去角度 - 也就是說,當您減去給定值時剩下的部分從一些標準值。不過,不知道「2」的補充 是否合理。

+0

「2的補碼」,因爲它在基數2中。通用術語是「基數補碼」。 – dan04 2010-04-09 01:07:58

+0

這真的很奇怪,爲什麼調用N來補充從N-1中減去數字的結果呢?而不是從N. – phkahler 2010-04-09 01:09:43

+0

@phkahler中減去它:因爲在基數N中,從N-1中減去每個數字,然後加上1,完全對應於從適當的N次冪中減去數字。例如,10的補數0573是9426 + 1 = 9427,這正好是10000-573。這也是該方法起作用的原因:846-573 = 846+(10000-573)-10000。 [瑣事:這符合所謂的「吠陀數學」中稱爲「全部來自9,最後來自10」的規則:http://en.wikipedia.org/wiki/Vedic_Mathematics] – ShreevatsaR 2010-04-09 01:25:34

0

在十進制編號系統,基數是:

  • 基數補被稱爲Ten公司的補充
  • 減少基數補被稱爲花枝招展補體

在二進制編碼系統,該基數是:

  • 基數補被稱爲
  • 減少基數補被稱爲的補

來源:https://en.wikipedia.org/wiki/Method_of_complements