计算机是否总是遵循 2 的补码方法来表示负数?

Does computer always follow 2's complement method to represent negative number?

本文关键字:方法 表示 补码 是否 计算机      更新时间:2023-10-16

请查看以下代码并帮助我理解

int a=1;
int b=~1;
printf("%d",b);

输出是:

 -2

因此,这说1 =(00000001)当经历〜产生(11111110)时,这是2号2的补充,因此-2是答案。因此,将始终假定为100为-4但不是4?

计算机总是遵循2的补充方法代表 负数?

no。

一些使用1的计算机(其中〜1 == -0),一些使用的"符号和幅度"(其中〜1 == -127),有些使用"偏差"(其中签名值是"无符号值" - 偏见",其中〜1 == 127)。对于整数来说,这些现在都相对罕见。

不稀有的东西是标准的(IEEE-754)浮点格式;这是"符号和幅度"(用于显着的)和"偏见"(用于指数)的光荣组合。

当您已经确切地确定数字有多少位时,只能定义两个的补充号码。您是否有一个三位签名的整数类型,在您存储100位的地方?如果是这样,则100将解释为-4。

如果将其存储在较大的整数类型中,我们通常会假设1个左侧的其他位是全部0(因为否则您应该显示它们是什么),并且该值将为正4。p>顺便说一句,现在找到一个具有C或C int类型的编译器将是非常不寻常的,该编译器只有8位长8位,就像问题中的一个一样。(好的,"不寻常"是一种轻描淡写的说明,如评论,标准不允许这样做,据我所知,它的从未被认为是合法的,将普通的int类型作为在一个可以存储在少于16位的问题中显示。您 can struct中声明了仅3位的签名整数位,但是该语法与问题显示的语法完全不同。因此,即使将int b=~1;解释为存储位模式11111110也不是正确的;实际的位模式至少有16位,近年来我们大多数人只将其汇编为32位。