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