关于字符ASCII与字符相加输出的错误

来源:互联网 发布:矩阵的秩计算 编辑:程序博客网 时间:2024/06/05 07:55

# include <iostream>using namespace std;int main(){char a = ('1'-'0'+'4'-'0')%10 ;a = a + '0';  //a = 5 + '0';cout<<a<<endl;return 0;}

此上2种打印结果为:

5


# include <iostream>using namespace std;int main(){char a = ('1'-'0'+'4'-'0')%10 ;cout<<(a+'0')<<endl;return 0;}

此种打印结果为:

53


已知‘0’的ASCII为48 ,得出53原因

main函数下一句代码分析:

a在与数字10进行取余操作的时,字符对应的ASCII值进行相加的,得出ASCII值为5的字符,

第二句分析:

由于是a + ‘0’是字符相加,所以是ASII值相加,隐形的转化为ASCII数值,所以打印的是‘5’对应的ASCII值53

证明代码:


# include <iostream>using namespace std;int main(){char a = ('1'-'0'+'4'-'0')%10 ;cout<<(char)(a+'0')<<endl;return 0;}

打印结果:

5


上面进行了char类型的强制转换,得出‘5‘

得证出:以上第二句代码分析进行了ASCII数值的隐形转换。


所以最上面粘贴的代码中

a = a + '0';  //a = 5 + '0';

相加后,赋值给a,进行了隐形转换,从而转换成字符‘5’


 总结:

以前值只注意到整形,浮点型,字符之间的隐形转换,这里还得注意字符与ASCII数值之间的隐形转换。(应该ASCII值也算是整形)


0 0