【发布时间】:2020-02-12 12:59:49
【问题描述】:
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;
}
我预计char temp 的输出是负数(或警告/错误),因为 160 超出了 [-127,127] 区间,但结果却是 ASCII 表中的那个(a带撇号)
char - 可以在目标系统上最有效地处理的字符表示类型(与有符号字符或无符号字符具有相同的表示和对齐方式,但始终是不同的类型)
我不明白用斜体写的内容(我也不确定它对这个问题有多大帮助)。有没有隐式转换?
【问题讨论】:
-
请注意,
char不能保证被签名。从您发布的链接中:“char 的签名取决于编译器和目标平台:ARM 和 PowerPC 的默认值通常是无符号的,x86 和 x64 的默认值通常是有符号的。”跨度> -
斜体部分表示
char有符号或无符号,但无论如何char、unsigend char和signed char是3(!)不同的类型。我认为与您的问题无关 -
请提供使用的编译器、您指定的任何编译器选项以及您运行它的平台。这些与正在发生的事情有关。
-
231在您的代码中是integer literal(en.cppreference.com/w/cpp/language/integer_literal),它隐式转换 (en.cppreference.com/w/cpp/language/implicit_conversion) 到您的“char”类型 -
@mvidelgauz 答案应该转到答案