ft_atoi函数中`result = (str[c] - '0') + (result * 10);`代码行的ASCII转整数原理问询
解释ft_atoi中的
(str[c] - '0') + (result * 10)操作 Great question — this line is the core of converting a string of digits into an actual integer, so let's break it down piece by piece.
1. 为什么要做str[c] - '0':把ASCII字符转成整数值
在C语言里,字符是以ASCII码的形式存储的。数字字符'0'到'9'的ASCII码是连续的:
'0'对应ASCII码48'1'对应ASCII码49'2'对应ASCII码50- ...
'9'对应ASCII码57
所以拿任意一个数字字符(比如'5')减去'0'的ASCII值,就能得到它对应的整数:'5' - '0' → 53 - 48 = 5。
这是C语言里把数字字符转成数值的常用技巧,不用硬写ASCII码的具体数值。
2. 为什么要做result * 10:构建多位数
result * 10的作用是把当前已经计算出的数字向左移动一位十进制位,给下一个数字腾出位置。咱们结合你代码里输入字符串的1234部分走一遍:
- 第一个字符
'1':result初始是0,0 * 10 + 1→ 1,此时result为1。 - 第二个字符
'2':1 * 10 + 2→ 12,此时result为12。 - 第三个字符
'3':12 * 10 + 3→ 123,此时result为123。 - 第四个字符
'4':123 * 10 + 4→ 1234,此时result为1234。
每次乘10相当于给当前数字加一个末尾的0,这样就能把新的数字追加到右边,一步步拼出完整的多位数。
把两部分结合起来看
完整的表达式(str[c] - '0') + (result * 10)把两步操作合并:
- 先把当前字符转成对应的整数
- 把已有的数字移位腾位置,再加上新的数字
这和我们从左到右读数字时的思考逻辑完全一致——就像你看到"1234"时,会先记1,然后1*10+2得到12,以此类推最终得到1234。
内容的提问来源于stack exchange,提问作者calyptus
相关产品推荐
相关产品推荐

