c - 使用'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-z
它A-Z
需要连续才能工作,这并非适用于所有字符集)。
推荐阅读
- typescript - 构造函数中复杂参数的默认值
- c# - 命名空间不能直接包含 2D 无限运行器中的字段或方法等成员
- xml - 使用 xmlstarlet 将 xml 节点提取为表
- c# - C#如何检查out参数的可空性?
- python-3.x - 如何在 api 调用期间雄辩地跟踪所有警告/消息并将其与 python 中的输出一起返回?
- python-3.x - 如何查看会员是否被封禁?不和谐.py
- docker - MQTT 错误:连接被拒绝。我究竟做错了什么?
- amazon-web-services - 是否可以使用 AWS Cognito 实施递升式身份验证?
- javascript - Photoshop 中的 getDocumentByName
- javascript - 即使在 Angular 中设置,也无法获取 BehaviourSubject 值