2的补码优于1的补码?

Posted

技术标签:

【中文标题】2的补码优于1的补码?【英文标题】:Advantage of 2's complement over 1's complement? 【发布时间】:2012-06-18 17:34:54 【问题描述】:

在二进制数系统的负数表示中,2 的补码比 1 的补码有什么优势?它如何影响二进制系统中数字的某个位表示形式存储的值的范围?

【问题讨论】:

我认为这篇***的文章应该足以回答这个问题:en.wikipedia.org/wiki/Signed_number_representations 这不是优势的问题。二进制补码的第一步是一个补码。之后添加一个以消除正零和负零的存在。 (您必须消除一点,因为您“购买”了一点来携带符号——这消除了您正在使用的位宽中使用的两个值。) 【参考方案1】:

2s 补码不是用来表示负数,它是逆数。

意味着你可以做 A + B'(其中 B' 是 B 的 2s 补码)得到 A - B,意味着你可以用加法器做所有事情,而不需要减法器

【讨论】:

你的意思是不是2的恭维代表负数,而是2的恭维由负数代表? Nope 2s 补码是 * -1 的十进制等值。负数的 2s 补码是正数,因为最高有效位为零【参考方案2】:

二进制补码相对于一个补码的主要优点是二进制补码只有一个值为零。一个补码有一个“正”零和一个“负”零。

接下来,要使用补码添加数字,您必须先进行二进制加法,然后添加一个结束进位值。

二进制补码只有一个零值,不需要进位值。

您还询问了存储的值范围如何受到影响。考虑一个八位整数值,以下是您的最小值和最大值:

Notation     Min   Max
==========  ====  ====
Unsigned:      0   255
One's Comp: -127  +127
Two's Comp: -128  +127

参考资料:

http://en.wikipedia.org/wiki/Signed_number_representations http://en.wikipedia.org/wiki/Ones%27_complement http://en.wikipedia.org/wiki/Two%27s_complement

【讨论】:

概括一下:对于N位,补码可以表示−(2^(N−1)−1) to 2^(N−1)−1范围内的整数,补码可以表示−2^(N−1) to 2^(N−1)−1范围内的整数。【参考方案3】:

负整数: 2 的补码可用于负整数。 1 的补码只是一种计算技术,可能有助于评估 2 的补码。 2 的补码的真正(击败)对手是负整数的符号幅度表示。

无溢出: 1 的补码对负整数没有特殊用途。 2 的补码是有意义的,因为它可以用于自然加法和减法运算,而无需更改位。如果没有发生溢出,结果的符号位就是正确的值。这种表示法中的位数提升是直截了当的,例如,要将一个 8 位有符号整数提升为 16,我们可以简单地在它的高字节中重复整数值的符号位。

符号幅度: 相反,符号幅度符号正是人类用来表示负整数的方式。位数提升和加减运算与这种表示法有点混乱。

【讨论】:

【参考方案4】:

主要优点是:

    在 1 中有一个 -0 (11111111) 和一个 +0 (00000000),即相同 0 的两个值。另一方面,在 2 的补码中,0 (00000000) 只有一个值。这是因为

    +0 --> 00000000
    

     -0 --> 00000000 --> 11111111 + 1 --> 00000000
    

    在使用 1 进行加法或减法等算术运算时,我们必须在结果中添加一个额外的进位位,即 1 以获得正确答案,例如:

           +1(00000001)
         +
           -1(11111110)
         -----------------
         = (11111111)
    

但正确答案是0。为了得到0,我们必须添加一个进位 位 1 到结果 (11111111 + 1 = 00000000)。

在 2 的补码中,结果不必修改:

               +1(00000001)
              +
               -1(11111111)
         -----------------
              = 1 00000000

【讨论】:

【参考方案5】:

二进制补码相对于有符号位表示的另一个主要优点是 2 的补码表示在硬件中易于操作

【讨论】:

这不是先有蛋的问题吗?因为硬件会优化选择的任何一个...... @Pacerier,不,不是。无论选择哪一个,硬件是否会优化都没有关系。事实上,构建优化 1 的补码加法和减法所需的硬件所需的电路(连接在一起的逻辑门系统)将比优化 2 的补码加法和减法所需的硬件电路更复杂。 @user904542,您的意思是所有电子硬件吗?嗯,新的生物计算机呢?【参考方案6】:

补码 #1 的优点

在二进制补码表示中,零值是 通过将所有位设置为零来唯一表示:

**

补码 #2 的优点

** 当您执行算术运算时(例如, 加法,减法,乘法,除法)在两个 二进制补码表示的有符号整数,你 可以使用 完全相同的方法 好像你有两个 无符号整数(即没有符号的非负整数 少量) ... 除了 ,你扔掉高进位(或高 借 减法)

补码 #3 的优点

补码表示的这个性质是这样的

几乎每个将军都非常方便

目的 今天可用的计算机使用二进制补码。 为什么?因为,有了补码,我们不需要 特殊算法 (因此额外的电路) 涉及负值的算术运算。

【讨论】:

以上是关于2的补码优于1的补码?的主要内容,如果未能解决你的问题,请参考以下文章

原码 反码 补码

二进制用补码做加减法怎么实现,举个例子??

知道 补码,如何 计算 原码

一个数的原码,反码,补码怎么算

Java连载14-补码简介&浮点型整数

原码和补码