2010-04-09 109 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