数据结构在实际项目中的使用(二)- 位图

原文也可见:https://jiajunhuang.com/tutorial/data_structure/bitmap.md

bitmap,就是传说中的位图,同样,在常见的互联网业务代码中很少看它的身影,但是在操作系统、网络驱动等软件中无处不是位图的 使用,其实在Redis中有对bitmap的直接操作,不过很少会用到。

位图的使用

首先我们来看看什么是位图(bitmap):

bitmap 位图的结构

我们知道计算机的世界是二进制的世界,最小单位就是bit,一个bit的值只有两个可能,要么是有,也就是1,要么是没有,就是0。而我们 平时所使用的所有类型都是bit构成的,例如我们把8个bit连在一起,称之为一个byte,而int,char,string这些都是在此之上构建的, 位图非常适合用来表示分布上比较连续,状态比较少(只有两种状态)的情况,例如,我们可以使用一个 uint32 来表示一个用户在 一个月中的某一天是否登录,如果登录了系统,那么对应天数的那个bit就设置为1,否则就是默认的0,这是因为一个月恰好是连续的 28天或者至多31天:

bitmap 表示一个月中登录的天数

由图中我们可以看到,登录的天数就是颜色不同的点,而一个 uint32 恰好是32个格子,比31天多一点点。

那么我们是怎么对位图进行操作的呢?我们要使用位操作,例如,以一个 byte 为例,默认情况下,他的值是 00000000,我们叫他b:

默认情况下的byte是8个0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值