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 - 可以在目标系统上最有效地处理的字符表示类型(与有符号字符或无符号字符具有相同的表示和对齐方式,但始终是不同的类型)
我不明白斜体写的是什么(我也不确定它对这个问题有很大帮助)。是否有任何隐式转换?
为什么有符号字符可以容纳比 127 更大的值?
这不可以。
char x = 231;
Run Code Online (Sandbox Code Playgroud)
在这里,有一个(隐式)整数转换: 231 是类型的纯右int值-25,并在转换为char(在您的系统上签名)之前取值。你可以让你的编译器用-Wconstant-conversion.
char - 可以在目标系统上最有效地处理的字符表示类型(与有符号字符或无符号字符具有相同的表示和对齐方式,但始终是不同的类型)
我不明白斜体字写的是什么
这与类型可以容纳什么无关,它只确保三种类型char,signed char并且unsigned char具有共同的属性。