数字的按位运算是否出错

问题描述 投票:0回答:1

c++ 中 ~43 的输出是 -44,但我计算出 212。

在 C++ 中,我只是计算 ~43,这是我的代码:

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    char hjg = 43;
    cout << ~hjg;
        //43 -> 0010 1011
        //212 -> 1101 0100
}

输出是

-44
。但当我用手机计算器计算时,我得到了212。

我的第一个问题是为什么输出为负?

第二个是为什么输出是

-44
相反
212

c++ bitwise-operators
1个回答
0
投票
  1. 您的
    char
    正在升级为
    int
    。十六进制值是 0x2b
  2. ~
    应用于
    int
    0x2b,结果为
    0xffffffd4
    (如果您的实现使用 32 位整数)
  3. 补码
    中的
    0xffffffd4
    -44
    ,并且打印该值。

我鼓励您自己进行实验:https://godbolt.org/z/3Ecf4YrWf

© www.soinside.com 2019 - 2024. All rights reserved.