请教代码中S[i]-'0'的作用及字符是否自动转换为整数
代码中
-'0'的作用与字符转整数的说明 1. -'0'的核心作用
在C/C++这类语言里,字符是基于ASCII编码存储的。举个实际的例子:字符'0'的ASCII值是48,'1'是49,'2'是50……以此类推,每个数字字符的ASCII值刚好比它对应的整数值大48。
所以S[i] - '0'这个操作,本质就是把字符形式的数字转换成对应的整数数字。比如当S[i]是'5'时,'5' - '0'就等于53 - 48 = 5,这样就能把字符'5'转成整数5,才能正常参与后续的数值计算(比如sum *10 + 5)。如果没有这一步,直接用S[i]的ASCII值参与计算,结果就完全偏离预期——比如用'5'的ASCII值53的话,sum*10 +53会得到和原数字字符串完全无关的数值。
2. 字符S[i]会自动转换为整数吗?
是的!在C/C++的算术运算中,char类型的变量会自动被提升为int类型,也就是它对应的ASCII码值。比如说S[i]是字符'3',在参与sum *10 + S[i]这个运算时,它会先被转换成ASCII值51,然后再和其他整数计算。
不过要注意:单纯的自动转换得到的是ASCII值,不是我们需要的数字本身,所以必须减去'0'的ASCII值(48),才能得到对应的整数数字。
内容的提问来源于stack exchange,提问作者return0
相关产品推荐
相关产品推荐

