【发布时间】:2018-06-06 11:42:12
【问题描述】:
请查看以下代码,帮助我理解
int a=1;
int b=~1;
printf("%d",b);
输出是:
-2
所以这表示 1=(00000001) 当经历 ~ 产生 (11111110) 这是数字 2 的 2 的补码,因此 -2 是答案。 所以 100 总是被假定为 -4 而不是 4 ?
【问题讨论】:
-
负数将始终设置最高位。因此,如果您的字节长度超过 3 位,则 100 将始终为 8,而不是 -4。
-
从技术上讲,并非每台计算机都使用二进制补码,但如今很少找到不使用二进制补码的计算机。
-
听起来你在要求一个基本二进制编码的教程。
-
不完全。 MSB 既是标志又是数据的一部分。此外,虽然它通常是 8 位,但一个字节可以是任意数量的二进制数字。
-
@动漫。我从未听说过不允许签名和未签名操作的通用机器。寄存器被解释为操作需要的任何内容。如果调用无符号加法,则 3 位寄存器中的 100 为 4。如果使用有符号加法,则为 -4。 你必须决定你想要哪个。 100 只是内存中位的集合,处理器会按照您的要求执行任何操作。