GETBIT 命令的实现

最后更新于:2022-04-01 21:38:14

GETBIT 命令用于返回位数组 `bitarray` 在 `offset` 偏移量上的二进制位的值: ~~~ GETBIT ~~~ GETBIT 命令的执行过程如下: 1. 计算 ![byte = \lfloor offset \div 8 \rfloor](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-09-13_55f52cbfae0a1.png) , `byte` 值记录了 `offset` 偏移量指定的二进制位保存在位数组的哪个字节。 2. 计算 ![bit = (offset \bmod 8) + 1](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-09-13_55f52cc84080d.png) , `bit` 值记录了 `offset` 偏移量指定的二进制位是 `byte` 字节的第几个二进制位。 3. 根据 `byte` 值和 `bit` 值, 在位数组 `bitarray` 中定位 `offset` 偏移量指定的二进制位, 并返回这个位的值。 举个例子, 对于图 IMAGE_BIT_EXAMPLE 所示的位数组来说, 命令: ~~~ GETBIT 3 ~~~ 将执行以下操作: 1. ![\lfloor 3 \div 8 \rfloor](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-09-13_55f52cceae34a.png) 的值为 `0` 。 2. ![(3 \bmod 8) + 1](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-09-13_55f52ccf865f5.png) 的值为 `4` 。 3. 定位到 `buf[0]` 字节上面, 然后取出该字节上的第 `4` 个二进制位(从左向右数)的值。 4. 向客户端返回二进制位的值 `1` 。 命令的执行过程如图 IMAGE_SEARCH_EXAMPLE 所示。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-09-13_55f52cd08c209.png) 再举一个例子, 对于图 IMAGE_ANOTHER_BIT_EXAMPLE 所示的位数组来说, 命令: ~~~ GETBIT 10 ~~~ 将执行以下操作: 1. ![\lfloor 10 \div 8 \rfloor](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-09-13_55f52cd26b00a.png) 的值为 `1` 。 2. ![(10 \bmod 8) + 1](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-09-13_55f52cd32bb39.png) 的值为 `3` 。 3. 定位到 `buf[1]` 字节上面, 然后取出该字节上的第 `3` 个二进制位的值。 4. 向客户端返回二进制位的值 `0` 。 命令的执行过程如图 IMAGE_ANOTHER_SEARCH_EXAMPLE 所示。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-09-13_55f52cd430f13.png) 因为 GETBIT 命令执行的所有操作都可以在常数时间内完成, 所以该命令的算法复杂度为 ![O(1)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-09-13_55f52cd565550.png) 。
';