# 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值也算是整形)