位运算处理字符串大小写转换

来源:互联网 发布:office for mac 破解版 编辑:程序博客网 时间:2024/05/16 15:44

 

大写转小写

大写字母与小写字母相差32
A     65     01000001
a     97     01100001-->A的第6位转为1,就能变为a

B     66     01000010
b     98     01100010-->B的第6为转为1,就能变为b

C     67     01000011
c     99     01100011-->同理
...
Y     89     01011001
y     121   01111001

Z     90     01011010
z     122   01111010

32(0x20)00100000
因为,大写字母和小写字母之间就第6位的值不一样,其他为都是相同的,
所以,只要大写字母的第6位从0-->1, 就能转换为小写字母

ch |= 32 --> 大写转小写
ch |= 0x20

小写转大写

想要把小写转换为大写,只要把小写的第6位1-->0

223(0xdf)11011111
ch &= 223 --> 小写转大写
ch &= 0xdf

大小写字母的互转

aBcDEf-->AbCdeF

同理,可以看第六位的值,想要互转,就需要转换第六位的值
所以可以使用异或运算

异或: 与0异或,值不变
          与1异或,值相反

ch ^= 32 --> 实现第六位的翻转,小写->大写,大写->小写