基于位运算的字母大小写转换

我们知道,在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,故不变。+32,转换为97-122,即大写变小写。
    由于97-122二进制第6位本来就是1,故

你可能感兴趣的:(基于位运算的字母大小写转换)