由ASCII码表可知大小写相差32=2^5,相应大小写化为二进制如下
ch | dec | bin | CH | dec | bin |
---|---|---|---|---|---|
a | 97 | 0110 0001 | A | 65 | 0100 0001 |
b | 98 | 0110 0010 | B | 66 | 0100 0010 |
c | 99 | 0110 0011 | C | 67 | 0100 0011 |
d | 100 | 0110 0100 | D | 68 | 0100 0100 |
e | 101 | 0110 0101 | E | 69 | 0100 0101 |
可见只有第5位(从右边第0位数起)不同,因此利用异或、与、或三种运算,保持其他位不变而只改变该位即可。
- 大写变小写,小写变大写
ch ^= 32, 即按位异或二进制 0010 0000 - 全部变小写
ch |= 32, 即按位或二进制 0010 0000 - 全部变大写
ch &= -33, 即按位与二进制 1101 1111