【发布时间】:2015-10-08 00:29:07
【问题描述】:
以下代码来自K&R教科书,第71页:
val =10.0*val+s[i] -'0'
s[i] -'0' 在这里是什么意思?
【问题讨论】:
-
数组s的声明在哪里?我猜它是一个包含数字的 char 数组,如果是这样,您询问的操作将返回减号的 int 值
-
有点类似于atoi函数。
以下代码来自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后每个字符的值应为 比前一个值大一。
所以在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。
因此,根据使用的字符集从字符中获取数字是一种标准方法。
【讨论】:
'0' 的实际值是多少并不重要,即使'0' 不是48,它也会起作用。
它将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;
【讨论】: