[英]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...在源和执行基本字符集中,上述十进制数字列表中 0 之后的每个字符的值都应比前一个值大 1。
所以在 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=49-48; //ascii values
所以val = 1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.