假设我有一个变量
int a = 512
现在当我应用~a表示c中的一个补码。我如何得到-513作为输出。
int的大小至少为16位,二进制的当量为512是
0000 0010 0000 0000现在,当你做一个补码时,就变成了
1111 1101 1111 1111.现在有人可以告诉我为什么输出是-513。
我现在可以希望这个论坛的人能理解我的问题。
答案 0 :(得分:11)
负数通常表示为two's complement,这就是它被解释的原因。
假设int
是16位,您将拥有位模式1111 1101 1111 1111
。由于设置了最顶部位,因此该数字为负数。要转换为十进制,根据二进制补码的规则,该数字首先按位反转。这会带回你的512.然后加一个,得到513.由于数字是负数,我们得到-513。