一个初始化bitmap的小算法

一个初始化bitmap小算法

根据长度,创建bitmap

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

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

golang 复制代码
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
	}
}
相关推荐
远瞻。2 小时前
【论文阅读】人脸修复(face restoration ) 不同先验代表算法整理2
论文阅读·算法
先做个垃圾出来………5 小时前
哈夫曼树(Huffman Tree)
数据结构·算法
phoenix@Capricornus6 小时前
反向传播算法——矩阵形式递推公式——ReLU传递函数
算法·机器学习·矩阵
Inverse1627 小时前
C语言_动态内存管理
c语言·数据结构·算法
数据与人工智能律师7 小时前
虚拟主播肖像权保护,数字时代的法律博弈
大数据·网络·人工智能·算法·区块链
wuqingshun3141597 小时前
蓝桥杯 16. 外卖店优先级
c++·算法·职场和发展·蓝桥杯·深度优先
YouQian7728 小时前
2025春训第十九场
算法
CodeJourney.8 小时前
基于MATLAB的生物量数据拟合模型研究
人工智能·爬虫·算法·matlab·信息可视化
Epiphany.5568 小时前
素数筛(欧拉筛算法)
c++·算法·图论
爱吃涮毛肚的肥肥(暂时吃不了版)8 小时前
项目班——0510——JSON网络封装
c++·算法·json