一个数字的补充

时间:2011-01-10 13:07:15

标签: c

假设我有一个变量

int a = 512

现在当我应用~a表示c中的一个补码。我如何得到-513作为输出。

int的大小至少为16位,二进制的当量为512是

0000 0010 0000 0000现在,当你做一个补码时,就变成了

1111 1101 1111 1111.现在有人可以告诉我为什么输出是-513。

我现在可以希望这个论坛的人能理解我的问题。

1 个答案:

答案 0 :(得分:11)

负数通常表示为two's complement,这就是它被解释的原因。

假设int是16位,您将拥有位模式1111 1101 1111 1111。由于设置了最顶部位,因此该数字为负数。要转换为十进制,根据二进制补码的规则,该数字首先按位反转。这会带回你的512.然后加一个,得到513.由于数字是负数,我们得到-513。