一个数字的补充

Alg*_*ist 2 c

假设我有一个变量

int a = 512

现在,当我应用〜一个意味着在c中的一个补码.如何我得到-513作为输出.

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

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

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

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

unw*_*ind 11

负数通常表示为二进制补码,这就是它被解释为原因的原因.

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