为何表达式结果因书写位置而异?C++代码异常问题咨询
问题分析:C++中char与整数运算的输出差异
嘿,我来帮你拆解这个看起来有点奇特的问题!先把你的代码和运行结果清晰列出来:
你的测试代码
#include <iostream> int main(int argc, char *argv[]){ char c = 1 + '0'; std::cout << 1 + '0' << std::endl; std::cout << c << std::endl; std::cout << '0' + 1 << std::endl; return 1; }
运行输出
$ ./program
49
1
49
为什么会出现这种差异?
咱们从ASCII编码和C++的类型提升规则来解释:
- ASCII码基础:字符
'0'在ASCII表中对应的数值是48,所以1 + '0'的计算结果其实是48 + 1 = 49。 - 类型提升规则:当
char类型和int类型(这里的1是int)进行运算时,char会被自动提升为int类型,所以1 + '0'的最终结果是int类型的49。 - 不同类型的输出逻辑:
- 直接输出
1 + '0'或者'0' + 1时,cout识别到这是int类型,就会直接打印它的数值49; - 当你把这个结果赋值给
char c时,49会被存储为char类型的字符——而ASCII码49对应的正好是字符'1',所以cout输出c的时候,会按照char类型的规则打印字符'1'。
- 直接输出
如果你想让c输出数值49怎么办?
只需要把c强制转换为int类型再输出就行,修改代码如下:
std::cout << static_cast<int>(c) << std::endl;
这样运行后,这一行就会输出49而不是字符'1'了。
内容的提问来源于stack exchange,提问作者john01dav
相关产品推荐
相关产品推荐

