Binary 1';s和2';补语系统

Binary 1';s和2';补语系统,binary,math,twos-complement,ones-complement,Binary,Math,Twos Complement,Ones Complement,我试图理解这两个系统之间的差异以及它们对C编程的影响 从维基百科上我学到了: 两种系统都用于表示负数 一的补码按位不适用于负数(系统有+0和-0) 2的补码与步骤2相同,并加1(消除+/-0) 我还缺什么吗 我的问题是: 哪些体系结构支持哪个系统?现在最常见的是什么(1的补码还是2的补码) 在C语言编程中,我们应该考虑什么样的系统?它是否只在嵌入式世界才有意义 提前谢谢 现在的大多数系统都使用二的补码,因为它可以让计算机对加减进行相同的精确运算,而不必考虑数字的特定符号 在编程时,无论使用何种系

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

从维基百科上我学到了:

  • 两种系统都用于表示负数
  • 一的补码按位不适用于负数(系统有+0和-0)
  • 2的补码与步骤2相同,并加1(消除+/-0)
  • 我还缺什么吗

    我的问题是:

  • 哪些体系结构支持哪个系统?现在最常见的是什么(1的补码还是2的补码)
  • 在C语言编程中,我们应该考虑什么样的系统?它是否只在嵌入式世界才有意义
    提前谢谢

    现在的大多数系统都使用二的补码,因为它可以让计算机对加减进行相同的精确运算,而不必考虑数字的特定符号


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

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

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