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

我们知道,在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不变

posted @ 2020-06-19 14:23  Edwin_Xu  阅读(403)  评论(0编辑  收藏  举报