一直没有搞清楚为什么在ASCII中要把大小写字母的间隔设置为32,今天才发现这样设置的精妙之处:方便了程序对大小写字母进行转换。请看:
=================
十进制 32
十六进制 20
二进制 00100000
=================
在大写转小写时,我们常用的做法是对字符的数值加32,该过程如下所示:
=========================
字符 A a
十进制 65 97
二进制 01000001 01100001
字符 Z z
十进制 90 122
二进制 01011010 00111010
=========================
可以看到,这个过程可以归纳为二进制值的右起第6位由0置为1,其余位不变。那么,我们可以这样来实现这个转换过程:
lcase = ucase | 0x20
反之,小写转大写的过程可以归纳为右起第6位由1置为0,其余位不变。那么,转换过程可以这样来实现:
ucase = lcase & 0xdf
注:0xdf=0b11011111