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

# 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值