C++输出signed/unsigned char时出现特殊字符÷的问题咨询
为什么cout输出char类型时显示字符而非数值?
这是因为C++的std::cout对char(包括signed char和unsigned char)类型的输出逻辑是将其解析为ASCII字符,而不是输出它的整数值。
具体原因拆解:
- 对于
signed char signedCharValue = -10:8位的signed char补码表示是0xF6,对应扩展ASCII表中的字符÷。 - 对于
unsigned char unsignedCharValue = 246:246的二进制也是0xF6,和上面的数值在内存中存储的字节完全一致,所以同样会被解析为字符÷。
解决方法:
如果想输出char变量的整数值,需要把它强制转换为整数类型(比如int),这样cout就会触发整数输出的重载逻辑,打印出对应的数值。
修改后的代码示例:
#include <iostream> using namespace std; int main() { // Signed char signed char signedCharValue = -10; cout << "Signed char: " << static_cast<int>(signedCharValue) << endl; // Unsigned char unsigned char unsignedCharValue = 246; cout << "Unsigned char: " << static_cast<int>(unsignedCharValue) << endl; return 0; }
运行后输出会符合预期:
Signed char: -10 Unsigned char: 246
内容的提问来源于stack exchange,提问作者mtk
相关产品推荐
相关产品推荐

