当前位置: 首页 > article >正文

一个初始化bitmap的小算法

一个初始化bitmap小算法

  • 根据长度,创建bitmap
    • 初始化bitmap

根据长度,创建bitmap

看到一个开源项目,利用bitmap存储数据,其中创建和初始化过程,比较经典。这里摘录出来,以备后续使用。代码采用的是golang

//数据结构
type bitmap struct {
	a       []uint64
	bitsLen int
}
// 入参是数据实际长度
func (bm *bitmap) init(bitsLen int) {
	a := bm.a
	//一个long是8字节(64bit),  通过长度bitlen计算出需要多少bit,向上取整
	//在网络编程中,经常是4字节、8字节对齐,其实是一样的道理
	wordsLen := (bitsLen + 63) / 64 
	a = slicesutil.SetLength(a, wordsLen)
	bm.a = a
	bm.bitsLen = bitsLen
}

初始化bitmap

func (bm *bitmap) setBits() {
	a := bm.a
	// 把bit位全部设置为1,即设置成-1, 因为是无符号的,-1就是最大值
	for i := range a {
		a[i] = ^uint64(0)
	}
	// 这个地方,模除,实际上计算出多余的,不需要的bit位
	tailBits := bm.bitsLen % 64
	// 将多余不需要使用的bit位设置成0
	if tailBits > 0 && len(a) > 0 { //将末尾用不到的bitmap,设置成0
		// Zero bits outside bitsLen at the last word
		a[len(a)-1] &= (uint64(1) << tailBits) - 1
	}
}

http://www.kler.cn/a/443108.html

相关文章:

  • 计算机毕业设计Python机器学习农作物健康识别系统 人工智能 图像识别 机器学习 大数据毕业设计 算法
  • 牛客网刷题 ——C语言初阶——BC96-有序序列判断
  • 【C++/控制台】2048小游戏
  • 计算机网络例题
  • 通过 route 或 ip route 管理Linux主机路由
  • 掌握正则表达式:从入门到精通的实战指南
  • flask_sqlalchemy event监听查询事件
  • 【排序算法】——选择排序
  • 如何设置代理服务器爬取商品信息?
  • C语言专题之文件操作(巨详细)
  • uniapp springboot 上传demo
  • 【深入STL:C++容器与算法】深度解析string类的使用
  • MyBatis 常见面试问题深度剖析
  • 讯飞智文丨一键生成WordPPT
  • 深度学习的下一站:解锁人工智能的新边界
  • 渗透测试之信息收集
  • Windows设置所有软件默认以管理员身份运行
  • ElasticSearch中的深度分页问题
  • 用vscode,进行vue开发
  • 对象克隆与单例模式
  • 抓取到的1688商品数据如何用于市场分析?
  • wazuh-modules-sca-scan
  • 安装MetaMask钱包、创建新钱包、切换到以太坊主网、进行钱包充值以及转出以太资产
  • 一个开源的自托管虚拟浏览器项目,支持在安全、私密的环境中使用浏览器
  • 自动呼入机器人如何与人工客服进行无缝切换?
  • windows C#-本地函数