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

时间:2015-07-18 10:22:17

标签: c

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

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

s[i] -'0'在这里意味着什么?

4 个答案:

答案 0 :(得分:7)

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

s[i] -'0'

相当于

53 - 48

并且等于数字5

根据C标准(5.2.1字符集)

  

3 ...在源和执行基本字符集中,上述小数位数列表中0之后的每个字符的值应为   比前一个值大一个。

所以在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

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

答案 1 :(得分:2)

它会将int表单中的char转换为实际的int

例如,如果s[i]'9',则s[i] - '0'将生成9

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

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

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

将缩减为val=49-48; //ascii values

所以val = 1;