使用'a'-'A'而不是“32”或空格字符背后的逻辑是什么?

这是“ The C Programming Language ”一书中的代码,它将单个字符映射到 ASCII 字符集的小写,如果字符不是大写字母,则返回不变:

int lower(int c)
{
    if (c >= 'A' && c <= 'Z')
        return c + 'a' - 'A';
    else
        return c;
}

我不明白背后的逻辑return c + 'a' - 'A';

他们为什么不简单地输入' '或 数字32而不是'a' - 'A'

回答

在ASCII字符集'a' - 'A'恰好有一个值的32。这是完全无关的ASCII空格字符' '还具有32的值,所以它是没有意义的替换'a' - 'A'' '

Using'a' - 'A'比 更有意义和更容易理解32,并且也不会将实现与使用特定字符集联系起来(尽管a-zA-Z需要连续才能工作,但并非所有字符集都如此)。

  • 需要明确的是,`c + 'a' - 'A'` 的字母不需要连续,即可将大写字母转换为小写字母。这也适用于 EBCDIC,即使那里的字母不连续。它只需要相应字符之间的均匀距离。`c &gt;= 'A' &amp;&amp; c &lt;= 'Z'` 的字母需要连续才能正确检测大写字母。

以上是使用'a'-'A'而不是“32”或空格字符背后的逻辑是什么?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>