Redis GETBIT命令的實(shí)現(xiàn)

2018-08-02 14:57 更新

GETBIT 命令用于返回位數(shù)組 bitarray 在 offset 偏移量上的二進(jìn)制位的值:

GETBIT <bitarray> <offset>

GETBIT 命令的執(zhí)行過(guò)程如下:

  1. 計(jì)算 byte = \lfloor offset \div 8 \rfloor , byte 值記錄了 offset 偏移量指定的二進(jìn)制位保存在位數(shù)組的哪個(gè)字節(jié)。
  2. 計(jì)算 bit = (offset \bmod 8) + 1 , bit 值記錄了 offset 偏移量指定的二進(jìn)制位是 byte 字節(jié)的第幾個(gè)二進(jìn)制位。
  3. 根據(jù) byte 值和 bit 值, 在位數(shù)組 bitarray 中定位 offset 偏移量指定的二進(jìn)制位, 并返回這個(gè)位的值。

舉個(gè)例子, 對(duì)于圖 IMAGE_BIT_EXAMPLE 所示的位數(shù)組來(lái)說(shuō), 命令:

GETBIT <bitarray> 3

將執(zhí)行以下操作:

  1. \lfloor 3 \div 8 \rfloor 的值為 0 。
  2. (3 \bmod 8) + 1 的值為 4 。
  3. 定位到 buf[0] 字節(jié)上面, 然后取出該字節(jié)上的第 4 個(gè)二進(jìn)制位(從左向右數(shù))的值。
  4. 向客戶端返回二進(jìn)制位的值 1 。

命令的執(zhí)行過(guò)程如圖 IMAGE_SEARCH_EXAMPLE 所示。

再舉一個(gè)例子, 對(duì)于圖 IMAGE_ANOTHER_BIT_EXAMPLE 所示的位數(shù)組來(lái)說(shuō), 命令:

GETBIT <bitarray> 10

將執(zhí)行以下操作:

  1. \lfloor 10 \div 8 \rfloor 的值為 1 。
  2. (10 \bmod 8) + 1 的值為 3 。
  3. 定位到 buf[1] 字節(jié)上面, 然后取出該字節(jié)上的第 3 個(gè)二進(jìn)制位的值。
  4. 向客戶端返回二進(jìn)制位的值 0 。

命令的執(zhí)行過(guò)程如圖 IMAGE_ANOTHER_SEARCH_EXAMPLE 所示。

因?yàn)?nbsp;GETBIT 命令執(zhí)行的所有操作都可以在常數(shù)時(shí)間內(nèi)完成, 所以該命令的算法復(fù)雜度為 O(1) 。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)