基于位运算的字符大小写转换
我们知道,在ASCII中:
A-Z对应65-90
a-z对应97-122
大小写转换可以通过+-32进行
有一种更好的方法:基于位运算的转换
统一转成大写:ch & 0b11011111 简写:ch & 0xDF
统一转成小写:ch | 0b00100000 简写:ch | 0x20
分析一下原理:
对于与 0b11011111 转大写
一个字符与上 0b11011111 的本质是:
- 如果二进制第6位是1,与完变0,就是原数-32 (0b00100000=32)
- 如果二进制第6位是0,与完不变,就是原数
由于65-90二进制第6位均为0,故不变。大写与完不变
由于97-122二进制第6位本来就是1,故-32.变为65-90,故大写转换为了小写。
与 0b00100000 转小写也是一样的。
原数二进制第6位是0:+32,是1:不变
65~90变为97-122,97-122不变