原文也可见:https://jiajunhuang.com/tutorial/data_structure/bitmap.md
bitmap,就是传说中的位图,同样,在常见的互联网业务代码中很少看它的身影,但是在操作系统、网络驱动等软件中无处不是位图的 使用,其实在Redis中有对bitmap的直接操作,不过很少会用到。
位图的使用
首先我们来看看什么是位图(bitmap):
我们知道计算机的世界是二进制的世界,最小单位就是bit,一个bit的值只有两个可能,要么是有,也就是1,要么是没有,就是0。而我们 平时所使用的所有类型都是bit构成的,例如我们把8个bit连在一起,称之为一个byte,而int,char,string这些都是在此之上构建的, 位图非常适合用来表示分布上比较连续,状态比较少(只有两种状态)的情况,例如,我们可以使用一个 uint32
来表示一个用户在 一个月中的某一天是否登录,如果登录了系统,那么对应天数的那个bit就设置为1,否则就是默认的0,这是因为一个月恰好是连续的 28天或者至多31天:
由图中我们可以看到,登录的天数就是颜色不同的点,而一个 uint32
恰好是32个格子,比31天多一点点。
那么我们是怎么对位图进行操作的呢?我们要使用位操作,例如,以一个 byte 为例,默认情况下,他的值是 00000000
,我们叫他b: