1和2的补充系统

时间:2011-01-05 03:52:31

标签: binary math twos-complement ones-complement

我正在尝试理解这两个系统之间的差异及其对C编程的影响。

从我从维基百科学到的东西:

  1. 两个系统都用于表示负数
  2. 一个补码按位数不应用于负数(系统有+0和-0)
  3. 两个补码与步骤2相同,并加1(消除+/- 0)
  4. 我错过了其他什么吗?

    我的问题:

    1. 哪个架构支持哪个系统?这几天最常见的是什么(1或2的补充)?
    2. 在用C编程时我们应该考虑这些系统?它只在嵌入式世界中才有意义吗?
    3. 提前致谢!

2 个答案:

答案 0 :(得分:4)

现在大多数系统都使用二进制补码,因为它可以使计算机执行相同的加法/减法操作,而无需关心数字的特定符号。

编程时,无论使用何种系统,算术都可以工作 - 数据类型的范围由语言定义,因此如果它表示类型将在-2 ^ 31到+ 2 ^范围内工作31 - 1,无论符号如何,它都会起作用。但是,在处理单个位或位移时需要小心 - 在非二进制补码系统中,这些算法不会像二次幂算法那样(尽管你不太可能遇到这样的系统,并且可能如果你只是在使用PC,那就永远不会。)

答案 1 :(得分:0)

整数的补码表示法的唯一优点是它允许在没有进位链的情况下执行符号 - 幅度形式的转换。如果寄存器使用单补码形式而不是使用二进制补码形式,那么使用一组显示每个寄存器的符号幅度形式值的blinkenlights构建计算机将更加方便。如果想要为blinkenlights和CPU的寄存器使用单独的存储锁存器,容纳事物的最简单方法是使用一个电路将二进制补码转换为一个补码或符号幅度形式,然后让每个寄存器同时写入将二进制补码值存储在寄存器中,同时使用符号幅度值更新blinkenlight锁存器。然而,锁存电路是非常昂贵的,如果寄存器是由离散锁存器构建的,那么向ALU添加一些电路以使其使用单个补码,然后从CPU的“实际”寄存器馈送光,可能是比包括一套额外的灯锁更便宜。

在过去的几十年中,当然,不同电路元件的相对成本已经转移到这样一个程度,即将灯连接到直接报告CPU寄存器状态是荒谬的。因此,过去补充设计可能具有的实际优势已不再适用。