s[i] - '0' 是什么意思?

What does s[i] - '0' mean?

以下代码来自K&R教科书,第71页:

val =10.0*val+s[i] -'0'

这里的s[i] -'0'是什么意思?

好像s是一个字符数组或者是指向字符数组首元素的指针。元素 s[i] 包含一个代表数字的字符,例如 '5' 。要转换此字符,例如在 ASCII 中具有等于 53 的内部代码(而字符 '0' 的内部代码为 48),则使用表达式

s[i] -'0'

相当于

53 - 48

等于数字5

根据 C 标准(5.2.1 字符集)

3...In both the source and execution basic character sets, the value of each character after 0 in the above list of decimal digits shall be one greater than the value of the previous.

所以在 ASCII 中有一个关系

字符代码值

    '0' - 48
    '1' - 49
    '2' - 50
    '3' - 51
    '4' - 52
    '5' - 53
    '6' - 54
    '7' - 55
    '8' - 56
    '9' - 57

例如,在 EBCDIC 中,表示数字的字符的内部代码是 240 - 249 ( 0 - 9 ) 或十六进制表示法 F0 - F9.

因此,根据使用的字符集,从字符中获取数字是一种标准方法。

它将 char 形式的 int 转换为实际的 int

例如,如果 s[i]'9',那么 s[i] - '0' 将产生 9

可能该代码用于将具有十进制数字的字符串转换为表示的数字(例如“1234”转换为1234)。

s[i]为当前位,s[i]-'0'为当前位的数值(如'9'变为9)。

C 代码的其余部分就是位置数值系统的工作原理。

假设 s[i] 包含来自 0 - 9 的值,然后它会将它们转换为数字。

例如。 s[0]='1';

所以val=s[0]-'0';

将减少到 val=49-48; //ascii values

所以val = 1;