2的补码优于1的补码?

pra*_*phy 51 binary negative-number

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

JYe*_*ton 54

二进制补码相对于一个补码的主要优点是二进制补码只有一个零值.一个补码有一个"正"零和一个"负"零.

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

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

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

Notation     Min   Max
==========  ====  ====
Unsigned:      0   255
One's Comp: -127  +127
Two's Comp: -128  +127
Run Code Online (Sandbox Code Playgroud)

参考文献:

  • 概括它:对于N位,One的恭维可以表示范围为` - (2 ^(N-1)-1)到2 ^(N-1)-1`的整数,而且两个恭维可以表示范围中的整数` - 2 ^(N-1)至2 ^(N-1)-1`. (3认同)

小智 16

主要优点是:

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

    +0 --> 00000000
    
    Run Code Online (Sandbox Code Playgroud)

     -0 --> 00000000 --> 11111111 + 1 --> 00000000
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在使用1进行加法或减法等算术运算时,我们必须添加一个额外的进位,即1结果以获得正确的答案,例如:

           +1(00000001)
         +
           -1(11111110)
         -----------------
         = (11111111)
    
    Run Code Online (Sandbox Code Playgroud)

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

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

               +1(00000001)
              +
               -1(11111111)
         -----------------
              = 1 00000000
Run Code Online (Sandbox Code Playgroud)


Cod*_*ive 7

负整数: 2 的补码对于负整数很有意义。1 的补码只是一种计算技术,可能有助于评估 2 的补码。2 的补码的真正(失败)竞争对手是负整数的符号大小表示。

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

符号大小:相反,符号大小符号只是人类用来表示负整数的方式。位数提升和加减运算与此表示法有点混乱。