Redis 设计与实现(第二版)第四部分:独立功能的实现二进制位数组GETBIT 命令的实现
GETBIT 命令的实现
GETBIT 命令用于返回位数组 bitarray 在 offset 偏移量上的二进制位的值:
GETBIT
GETBIT 命令的执行过程如下:
- 计算
, byte值记录了offset偏移量指定的二进制位保存在位数组的哪个字节。 - 计算
, bit值记录了offset偏移量指定的二进制位是byte字节的第几个二进制位。 - 根据
byte值和bit值, 在位数组bitarray中定位offset偏移量指定的二进制位, 并返回这个位的值。
举个例子, 对于图 IMAGE_BIT_EXAMPLE 所示的位数组来说, 命令:
GETBIT 3
将执行以下操作:
的值为 0。
的值为 4。- 定位到
buf[0]字节上面, 然后取出该字节上的第4个二进制位(从左向右数)的值。 - 向客户端返回二进制位的值
1。
命令的执行过程如图 IMAGE_SEARCH_EXAMPLE 所示。

再举一个例子, 对于图 IMAGE_ANOTHER_BIT_EXAMPLE 所示的位数组来说, 命令:
GETBIT 10
将执行以下操作:
的值为 1。
的值为 3。- 定位到
buf[1]字节上面, 然后取出该字节上的第3个二进制位的值。 - 向客户端返回二进制位的值
0。
命令的执行过程如图 IMAGE_ANOTHER_SEARCH_EXAMPLE 所示。

因为 GETBIT 命令执行的所有操作都可以在常数时间内完成, 所以该命令的算法复杂度为
。