假设我有一个变量
int a=512
现在,当我应用 ~a 时,这意味着 c 中的补码。我如何得到 -513 作为输出。
int 的大小至少为 16 位,二进制等价于 512 是
0000 0010 0000 0000 现在当你做它的补码时它变成了
1111 1101 1111 1111。现在谁能告诉我为什么输出是 -513。
我现在可以希望这个论坛中的人理解我的问题。
最佳答案
负数通常表示为 two's complement ,这就是为什么要这样解释的原因。
假设 int
是 16 位的,您将拥有位模式 1111 1101 1111 1111
。由于设置了最高位,因此该数字为负数。要转换为十进制,根据二进制补码的规则,首先将数字按位取反。这带回了你的 512。然后加上一个,得到 513。由于数字是负数,我们得到 -513。
关于c - 一个数的补码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4647141/