为什么将按位NOT应用于char会产生一个int?

Han*_*Qiu 2 c++

在我的笔记本电脑上,运行以下代码:

#include <iostream>
using namespace std;

int main()
{
    char a;
    cout << sizeof(~a) << endl;
}
Run Code Online (Sandbox Code Playgroud)

打印4.

我期望结果~achar,但显然,它是一个int.

这是为什么?

Mue*_*ito 5

~是一个操作员arithemtic(按位NOT),并a正被从提升signed charint(并且在许多实现方式中sizeof(int) == 4).请参阅下面的解释:

http://en.cppreference.com/w/cpp/language/implicit_conversion#integral_promotion

小整数类型(例如char)的Prvalues可以转换为更大整数类型(例如int)的prvalues.特别是,算术运算符不接受小于int的类型作为参数,并且在左值到右值转换后自动应用整数促销(如果适用).此转换始终保留该值.