修改本页

Redis 命令 客户端 文档 社区 下载 问题 支持 许可

BITPOS key bit [start] [end]

相关命令

Available since 2.8.7.

时间复杂度: O(N)

Return the position of the first bit set to 1 or 0 in a string.

The position is returned thinking at the string as an array of bits from left to right where the first byte most significant bit is at position 0, the second byte most significant big is at position 8 and so forth.

The same bit position convention is followed by GETBIT and SETBIT.

By default all the bytes contained in the string are examined. It is possible to look for bits only in a specified interval passing the additional arguments start and end (it is possible to just pass start, the operation will assume that the end if the last byte of the string. However there are semantical differences as explained later). The range is interpreted as a range of bytes and not a range of bits, so start=0 and end=2 means to look at the first three bytes.

Note that bit positions are returned always as absolute values starting from bit zero even when start and end are used to specify a range.

Like for the GETRANGE command start and end can contain negative values in order to index bytes starting from the end of the string, where -1 is the last byte, -2 is the penultimate, and so forth.

Non-existent keys are treated as empty strings.

返回值

Integer reply

The command returns the position of the first bit set to 1 or 0 according to the request.

If we look for set bits (the bit argument is 1) and the string is empty or composed of just zero bytes, -1 is returned.

If we look for clear bits (the bit argument is 0) and the string only contains bit set to 1, the function returns the first bit not part of the string on the right. So if the string is tree bytes set to the value 0xff the command BITPOS key 0 will return 24, since up to bit 23 all the bits are 1.

Basically the function consider the right of the string as padded with zeros if you look for clear bits and specify no range or the start argument only.

However this behavior changes if you are looking for clear bits and specify a range with both start and end. If no clear bit is found in the specified range, the function returns -1 as the user specified a clear range and there are no 0 bits in that range.

例子

redis> SET mykey "\xff\xf0\x00"

  1. OK

redis> BITPOS mykey 0

  1. (integer) 12

redis> SET mykey "\x00\xff\xf0"

OK

redis> BITPOS mykey 1 0

(integer) 8

redis> BITPOS mykey 1 1

(integer) 8

redis> set mykey "\x00\x00\x00"

OK

redis> BITPOS mykey 1

(integer) -1
redis>

Comments powered by Disqus

This website is open source software developed by Citrusbyte.

The Redis logo was designed by Carlos Prioglio. See more credits.

Sponsored by Redis Support