You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)把两步操作合并:

  1. 先把当前字符转成对应的整数
  2. 把已有的数字移位腾位置,再加上新的数字

这和我们从左到右读数字时的思考逻辑完全一致——就像你看到"1234"时,会先记1,然后1*10+2得到12,以此类推最终得到1234。

内容的提问来源于stack exchange,提问作者calyptus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 12:52:41