为什么可以通过ASCII中的字母排序规则来进行字母的大小写转换?
比如:
通过a+'a'-'A' 将大写字母转换成小写字母
通过a+'A'-'a' 将小写字母转换成大写字母
这是为什么呢?
望点拨指教,谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
比如:
通过a+'a'-'A' 将大写字母转换成小写字母
通过a+'A'-'a' 将小写字母转换成大写字母
这是为什么呢?
望点拨指教,谢谢!
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
因为当时设计ASCII时,对字母进行编码的时候,就编得非常有规律:
字母的编码按照字母表中顺序进行排序。
同一个字母的大小写的编码的距离相同。
假设一开始ASCII的发明者抽风了,完全随意编码。那么这个方法就不行了。
另外,其实char类型也是一种整型,只不过它被设计成可以直接用字符字面量赋值罢了。
c/c++语言中为了区分值的不同用途,添加了类型的概念, 于是同样的值允许有不同的解释方式;
c++在处理char之间的减法时, 是
按照原始的byte内二进制数值进行运算; 所以'a'可以和'A'做数值的加减
;另外ASCII码表定义了一个具体值到人类可读字符的映射关系,参见ASCII表,你可以看到对应关系是按照字母表顺序定义好的, 而且在具体的值上a>A; 且a-A和b-B的差值是固定的,
任何一个大写字母在数值上加上这个差值刚好就能得到对应的小写字母的值
.a + 'a' - 'A'
'a'的ASCII是97,'A'的ASCII是65,所以上面这一行就等于
a + 97 - 65
, 也就是a + 32
。去试一试:
首先明确 C++ 中字符的概念,一个
char
类型的变量在实际存储时通常是一个8位的二进制数(即一个字节),所以支持各种数学运算。当你用'A'-'a'
时,结果就是这两个字符对应的数值差。而一个
char
与一个数字是怎么对应起来的呢?这就要说到 ASCII 字符表了,它明确了字符与数字之间的映射关系,每一个字符都一一对应于一个数字。部分 ASCII 字符表如下所示:不知道看完以后题主能发现规律吗?表中的字符
0
到9
是连续分布的,A
到Z
是连续分布的,a
到z
也是连续分布的。而且同一对大小写字母之间的距离是相同的,即'A'-'a'
,且大写在前,小写在后。所以,可以通过通过
ch + 'a' - 'A'
将大写字母转换成小写字母,通过ch + 'A' - 'a'
将小写字母转换成大写字母。大写与小写之间差了32