22.2 GETBIT命令的实现

GETBIT命令用于返回位数组bitarray在offset偏移量上的二进制位的值:



GETBIT <bitarray> <offset>

GETBIT命令的执行过程如下:

1)计算byte= offset÷8」,byte值记录了offset偏移量指定的二进制位保存在位数组的哪个字节。

2)计算bit=(offset mod 8)+1,bit值记录了offset偏移量指定的二进制位是byte字节的第几个二进制位。

3)根据byte值和bit值,在位数组bitarray中定位offset偏移量指定的二进制位,并返回这个位的值。

举个例子,对于图22-2所示的位数组来说,命令:



GETBIT <bitarray> 3

将执行以下操作:

1) 3÷8」的值为0。

2)(3 mod 8)+1的值为4。

3)定位到buf[0]字节上面,然后取出该字节上的第4个二进制位(从左向右数)的值。

4)向客户端返回二进制位的值1。

命令的执行过程如图22-4所示。

图22-4 查找并返回offset为3的二进制位的过程

再举一个例子,对于图22-3所示的位数组来说,命令:



GETBIT <bitarray> 10

将执行以下操作:

1) 10÷8」的值为1。

2)(10 mod 8)+1的值为3。

3)定位到buf[1]字节上面,然后取出该字节上的第3个二进制位的值。

4)向客户端返回二进制位的值0。

命令的执行过程如图22-5所示。

图22-5 查找并返回offset为10的二进制位的过程

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