首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

bitpos

代码语言:javascript
复制
BITPOS key bit [start] [end]

自2.8.7起可用。

时间复杂度: O(N)

查找字符串中第一个设置为1或0的bit位。

返回该位置,将字符串视为从左到右的位数组,其中第一个字节的最高有效位位于位置0,第二个字节的最高有效位位于位置8,等等。

GETBIT 和 SETBIT后面跟着相同的位位置约定。

默认情况下,检查字符串中包含的所有字节。可以仅在指定的时间间隔内查找位,并传递额外的参数 start end(可能只是传递start,操作会假定 end 是字符串的最后一个字节,但是存在语义差异后来)。的范围内被解释为范围的字节,而不是一比特的,所以start=0end=2装置看的前三个字节。

请注意,即使在使用开始结束来指定范围时,位位置也始终以从零位开始的绝对值的形式返回。

与 GETRANGE 命令类似,开始和结束可以包含负值,以便从字符串的末尾开始索引字节,其中-1是最后一个字节,-2是倒数第二个字符,等等。

不存在的键被视为空字符串。

返回值

该命令根据请求返回第一位设置为1或0的位置。

如果我们查找设置位(位参数为1)并且字符串为空或仅由零字节组成,则返回-1。

如果我们查找清零位(位参数为0)并且该字符串仅包含位设为1,则函数返回第一位,而不是右侧字符串的一部分。因此,如果字符串是三个字节设置为该值,0xff该命令BITPOS key 0将返回24,因为直到位23,所有的位都是1。

基本上,函数认为字符串的权利,与你寻找明确位,没有指定范围或补零开始的说法

但是,如果您正在查找清除位并指定具有开始结束的范围,则此行为会发生变化。如果在指定范围内未找到清除位,则该函数返回-1,因为用户指定了一个清除范围,并且该范围内没有0位。

例子

redis> SET mykey "\xff\xf0\x00" "OK" redis> BITPOS mykey 0 (integer) 12 redis> SET mykey "\x00\xff\xf0" "OK" redis> BITPOS mykey 1 0 (integer) 8 redis> BITPOS mykey 1 2 (integer) 16 redis> set mykey "\x00\x00\x00" "OK" redis> BITPOS mykey 1 (integer) -1

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com