c - 一个数的补码

标签 c

假设我有一个变量

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/

相关文章:

c++ - 两个相互调用的函数 - C/C++

c - 检测 scanf 何时没有输入

"a->b=1;c=a"可以重新排序吗?

c++ - 优化 Microsoft Visual Studio 编译器生成的程序集

c - 二叉搜索树 (BST) - 遍历搜索

c - 如何在 c 中分配指向数组 [ ] 的指针?

c - 如何修改TCP拥塞算法?

c++ - do-while-false 循环是否常见?

C程序读取文件时输出错误

c - 调用 make 时找不到 MakeFile