在第23页的K& R第二版中,有一些代码
if (c >= '0' && c <= '9')
++ndigit[c-'0'];
继续。我的问题是,为什么整数有&#39;在每一边? 什么是c - &#39; 0&#39;?
答案 0 :(得分:2)
'0'
是一个角色。它具有整数值48. '9'
具有值57. c - '0'
的值等于c - 48
,并且将是相应字符的整数值。 '0'
将为0
,'1'
将为1
等。
答案 1 :(得分:1)
'0'
是char
,即一个角色。每个字符在内部由整数表示。见ASCII。例如,'0'
具有整数值48
。
答案 2 :(得分:1)
代码的目的是将字符 '0'...'9'
转换为相应的整数值0...9
。 C 不保证表示十进制数字的字符具有任何特定值,但确实保证它们是连续的并且顺序正确。上面的减法将始终为您提供正确的整数值。
对于C中的任何其他角色,没有类似的保证。
ISO 9899:1999标准(又名C99)说:
执行字符集的成员值是实现定义的。 ...
所有位都设置为0的字节,称为空字符,应存在于基本执行字符集中;它用于终止字符串。 ...
上述十进制数字列表中0后的每个字符的值应大于前一个值。
在N1570中找到了完全相同的措辞,这是当前标准(C11)的最终公开草案。
关于角色的价值或关系,没有其他说法。