为什么有符号字符可以容纳比 127 更大的值?

Căt*_*rbu 4 c++ char

int main()
{
    char MCU = 0b00000000;
    char al_av = 0b10100000;

    // Before bit operation
    cout << "MCU = " << int(MCU) << endl;

    MCU = MCU | al_av;

    // After the bit operation
    cout << "MCU = " << int(MCU) << endl;   // Expected 160, got -96

    char temp = 160;

    cout << temp;   // got the a with apostrophe

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我预计 的输出为char temp负数(或警告/错误),因为 160 超过了 [-127,127] 间隔,但结果是 ASCII 表中的那个(带有撇号的)

关于cpp 参考:

char - 可以在目标系统上最有效地处理的字符表示类型(与有符号字符或无符号字符具有相同的表示和对齐方式,但始终是不同的类型)

我不明白斜体写的是什么(我也不确定它对这个问题有很大帮助)。是否有任何隐式转换?

YSC*_*YSC 9

为什么有符号字符可以容纳比 127 更大的值?

这不可以。

char x = 231;
Run Code Online (Sandbox Code Playgroud)

在这里,有一个(隐式)整数转换: 231 是类型的纯右int值-25,并在转换为char(在您的系统上签名)之前取值。你可以让你的编译器用-Wconstant-conversion.


char - 可以在目标系统上最有效地处理的字符表示类型(与有符号字符或无符号字符具有相同的表示和对齐方式,但始终是不同的类型)

我不明白斜体字写的是什么

这与类型可以容纳什么无关,它只确保三种类型char,signed char并且unsigned char具有共同的属性。