1. 位数组的表示
Redis使用字符串对象来表示位数组,字符串对象使用的SDS数据结构是二进制安全的。
使用
逆序来保存位数组
2. GETBIT命令的实现
3. SETBIT命令的实现
4.BITCOUNT命令的实现
4.1 遍历算法
4.2 查表算法
4.3 variable-precision SWAR算法
计算汉明重量
4.4 Redis的实现
用到了查表和variable-precision SWAR两种算法:
- 查表算法使用键长为8为的表,表中记录了从0000 0000到1111 1111在内的所有二进制位的汉明重量
- 至于variable-precision SWAR 算法方面,BITCOUNT命令在每次循环中载入128个二进制位,然后调用四次32 位variable-precision SWAR算法来计算128个二进制位的汉明重量