c语言 - 数组 K&R 1.6 字符?



在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

相关内容

  • 没有找到相关文章

最新更新