位图指令
===========setbit 指令===================
setbit key offset value 下标从0开始
eg
setbit w 1 1; 在第一位(高位) 设为1 如果返回为0 则则设置成功 返回为1 表示该位原来有值 覆盖成功
getbit key offset 同时也可以执行 get key 零存整取 所以也有整存零取的操作
eg
getbit w 1
===========bitcount 指令===================
bitcount key start end [start ,end]
区间 -1 表示尾部 第一 -2表示尾部第二个 返回所在指定区间内 位为1的数量
set w he
bitcount w 0 0 --->3 下标从0开始
bitcount w 0 -1(1)--->7
=============bitpos 指令===================
用来查找指定范围内出现的第一个 0 或 1。
bitpos key bit(0|1) start end
其中 bit只能为0或者1 start end指的是对应的字节
该指令返回的结果是说 在[start,end]区间的字符内 第一个0或者1(bit为)出现的位置的下表(该下标是全部bit的位置)
eg
he-> 01101000 01100101
127.0.0.1:6379> bitpos w 1 0 1 查找he 中第一次出现1的bit位的下标
(integer) 1
127.0.0.1:6379> bitpos w 0 0 0
(integer) 0
127.0.0.1:6379> bitpos w 1 1 1 查找e中第一次出现1的bit位的下标
(integer) 9
================bitfield 指令 ================
对指定位置的连续bit位进行读或写处理
1.读指令 bitfield get key u|i[num] offset
该指令是从该字节偏移offset的bit位 读取 区间为[offset,num+offset]
如果为u[num] 则从偏移出 连续读num个bit位 然后按照无符号数显示结果
如果为i[num] 则从偏移出 连续读num个bit位 然后按照有符号数显示结果
eg
he-> 01101000 01100101
set w he
bitfield w get u2 0 ==>01 无符号数 ---->1
bitfield w get u3 1 ==>110 无符号数 ---->3
bitfield w get i3 1 ==>110 有符号数 按位取反 001 末位加1 010 ---->-2
同时支持一次读取多个
127.0.0.1:6379> bitfield w get u2 0 get u3 1 get i3 1
1) (integer) 1
2) (integer) 6
3) (integer) -2
2. 写指令 bitfield key set i|u[num] offset value
该指令将bit位区间 [offset,num+num] 替换为 value对应的 bit值 这里 value 必须为整数
如果超过区间的长度 值截取 区间范围内的bit位
比如 要对0000 设置 128 明显不够长度 这个时候 我们只区128的低4位 0000
无符号貌似没什么意义 就不管了
eg
he-> 01101000 01100101
set w he
127.0.0.1:6379> bitfield w set u8 8 h 不是数字 非法
(error) ERR value is not an integer or out of range
127.0.0.1:6379> bitfield w set u4 8 128 4个bit位 放不下128 只取2低位的4个bit
1) (integer) 6
127.0.0.1:6379> bitfield w get u4 8 这里取值就变为0
1) (integer) 0
127.0.0.1:6379> get w 这里e 从 01100101 变为 0000 0101 没有对应的asii码 所以转为16进制输出
"h\x05"
127.0.0.1:6379> bitfield w set u8 8 97 -->a
1) (integer) 101
127.0.0.1:6379> get w
"ha"
3. 自增指令(个人感觉用处不大) bitfield key incrby u|i[num] offset value
对指定区间内的(有)无符号数字 增加 value 区间为 [offset,num+offset]
eg
he-> 01101000 01100101
set w he
127.0.0.1:6379> bitfield w incrby u4 12 1
1) (integer) 6
127.0.0.1:6379> bitfield w get u4 12
1) (integer) 6
127.0.0.1:6379>
4. 对于incryby 指定区间溢出后的处理
1. 默认是折返 即溢出 只保留指定区间的bit的值
2. overflow 指定溢出策略
sat 饱和截断 即保留最大值 不在自增
fail 不执行
eg
he-> 01101000 01100101
set w he
// 饱和截断
127.0.0.1:6379> bitfield w overflow sat incrby u3 0 3
1) (integer) 6
127.0.0.1:6379> bitfield w overflow sat incrby u3 0 1
1) (integer) 7
127.0.0.1:6379> bitfield w overflow sat incrby u3 0 1 --这里不改变
1) (integer) 7
//默认折返
127.0.0.1:6379> bitfield w incrby u3 0 1
1) (integer) 6
127.0.0.1:6379> bitfield w incrby u3 0 1
1) (integer) 7
127.0.0.1:6379> bitfield w incrby u3 0 1
1) (integer) 0
127.0.0.1:6379> bitfield w incrby u3 0 1
1) (integer) 1
//不执行
127.0.0.1:6379> bitfield w overflow fail incrby u3 0 1
1) (integer) 5
127.0.0.1:6379> bitfield w overflow fail incrby u3 0 1
1) (integer) 6
127.0.0.1:6379> bitfield w overflow fail incrby u3 0 1
1) (integer) 7
127.0.0.1:6379> bitfield w overflow fail incrby u3 0 1 --这里已经超过做大值 所以这里不执行
1) (nil)
127.0.0.1:6379> bitfield w get u3 0 --- 此时仍然是最大值
1) (integer) 7
127.0.0.1:6379>
易语言位或 在python中怎么表示 易语言位图命令
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
python、易语言千牛自动化收发消息
易语言千牛收发消息api接口
易语言 API 初始化 千牛 收发消息 -
易语言24位转单色位图模块其他 经验分享