以下代码来自K& R教科书,第71页:
val =10.0*val+s[i] -'0'
s[i] -'0'
在这里意味着什么?
答案 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;