为了账号安全,请及时绑定邮箱和手机立即绑定

a为5,为什么取反后c的值不是2呢?

a的二进制是101,那么取反应该是010,十进制为2,为什么c输出的值为-6呢?

https://img1.sycdn.imooc.com/66f3f8f00001b5e809480631.jpg

正在回答

1 回答

核心问题解答

在C++中,整数(如int类型)通常使用补码表示法来存储负数。对于正数5,其二进制表示为00000101(假设这是一个8位的整数)。当你对这个数取反(即按位取反),得到的是11111010

但是,由于计算机使用补码表示法,这个结果实际上代表的是-6。这是因为:

  1. 首先,找到6的补码表示。6的二进制表示为00000110
  2. 然后,将6的二进制表示取反,得到11111001
  3. 最后,将取反的结果加1,得到11111010

因此,11111010在补码表示法中代表的是-6,而不是2。

修复后的代码

在这个例子中,代码本身没有错误,因为它正确地展示了取反操作的结果。如果你希望看到取反后的二进制表示,可以修改代码如下:

#include <stdio.h>
#include <bitset>

int main(int argc, char **argv)
{
    int a = 5;
    int c;
    printf("a的值为:%d\n", a);
    c = ~a;
    printf("c的值为:%d\n", c);
    std::bitset<8> binary_c(c);
    printf("c的二进制表示为:%s\n", binary_c.to_string().c_str());
    return 0;
}

这段代码会输出c的二进制表示,帮助你更好地理解取反操作的结果。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

a为5,为什么取反后c的值不是2呢?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信