【问题标题】:1's and 2's complement systems1 和 2 的补码系统
【发布时间】:2011-06-03 19:04:41
【问题描述】:

我试图了解这两个系统之间的差异以及它们对 C 编程的影响。

根据我从 Wikipedia 中学到的知识:

  1. 两个系统都用于表示负数
  2. 一个补码将按位 NOT 应用于负数(系统有 +0 和 -0)
  3. 二进制补码与第 2 步一样,加 1(消除 +/-0)

我还错过了什么吗?

我的问题:

  1. 哪些架构支持哪些系统?目前最常见的是什么(1 或 2 的补码)?
  2. 在用 C 编程时,我们应该从什么意义上考虑这些系统?它主要只在嵌入式世界中有意义吗?

提前致谢!

【问题讨论】:

    标签: binary math twos-complement ones-complement


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      整数的补码表示法的唯一优点是它允许在没有进位链的情况下执行符号大小形式的转换。如果寄存器使用反码形式比使用反码形式的寄存器使用一组闪烁灯以符号幅度形式显示每个寄存器的值,那么构建一台计算机会方便得多。如果想为闪烁灯和 CPU 的寄存器使用单独的存储锁存器,最简单的方法是使用一个电路,将二进制补码转换为二进制补码或符号幅度形式,然后让每个寄存器同时写入将二进制补码值存储在寄存器中,同时使用符号幅度值更新闪烁灯锁存器。锁存电路非常昂贵,但是,如果寄存器是由离散锁存器构建的,则向 ALU 添加一些电路以使其使用反码,然后从 CPU 的“真实”寄存器馈送光,可能是比为灯安装额外的一组闩锁便宜。

      当然,在过去的几十年里,不同电路元件的相对成本已经转移到让灯直接报告 CPU 寄存器状态的程度是荒谬的。因此,one-complement 设计在过去可能具有的实际优势不再适用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多