ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

基于uint32的BitMap类库

2022-01-31 17:33:18  阅读:169  来源: 互联网

标签:类库 capacity BitMapLength BitMap oldArrayValue int64 key uint32


package tools

import (
	"fmt"
	"strconv"
)

type BitMapTool struct {
	Capacity int64
	BitMapLength int64
	BitMapArray []uint32
}

//region 初始化指定容量的BitMap,使用uint32类型的数组
func (this *BitMapTool) Init(capacity int64){
	this.Capacity=capacity
	this.BitMapLength=int64((capacity+31)/32)
	fmt.Printf("定义BitMap,容量:%d,数组长度:%d\n",capacity,this.BitMapLength)
	this.BitMapArray=make([]uint32,this.BitMapLength)
}
//endregion

//region 设置第N个位置的值为1,即true
func (this *BitMapTool) SetValue(key int64,value bool){
	idx:=uint32((key-1)/32)
	pos:=uint32((key-1) % 32)

	var oldArrayValue,newArrayValue uint32
	oldArrayValue=this.BitMapArray[idx]
	fmt.Printf("数组位置:%d,原值:%d,二进制值:%s\n",idx,oldArrayValue,this.ConverToBianry(oldArrayValue))

	if value{
		newArrayValue=((uint32(1) << pos)|oldArrayValue)
	}else{
		newArrayValue=(uint32(0)&oldArrayValue)|
	}

	fmt.Printf("数组位置:%d,新值:%d,二进制值:%s\n",idx,newArrayValue,this.ConverToBianry(newArrayValue))

	this.BitMapArray[idx]=newArrayValue
}
//endregion


//region 取出第N个位置的bit位的值,判断该值是否存在,true为存在,false为不存在
func (this *BitMapTool) GetValue(value int64)(ret bool){
	idx:=uint32((value-1)/32)
	pos:=uint32((value-1) % 32)

	var oldArrayValue uint32
	oldArrayValue=this.BitMapArray[idx]
	fmt.Printf("数组位置:%d,当前值:%d,二进制值:%s\n",idx,oldArrayValue,this.ConverToBianry(oldArrayValue))

	retstr:="不存在"
	newValue:=(uint32(1) << pos)&oldArrayValue
	if(newValue==0){
		ret=false
	}else{
		ret=true
		retstr="存在"
	}
	fmt.Printf("数组位置:%d,与1<<%d的与计算值:%d,二进制值:%s,结论:%t-%s\n",idx,pos,newValue,this.ConverToBianry(newValue),ret,retstr)
	return ret
}
//endregion

//region 将整型数值转换为二进制字符串
func (this *BitMapTool) ConverToBianry(n uint32) string {
	result := ""
	for ; n > 0; n /= 2 {
		lsb := int(n % 2)
		result = strconv.Itoa(lsb) + result
	}
	return result
}

//endregion

  

标签:类库,capacity,BitMapLength,BitMap,oldArrayValue,int64,key,uint32
来源: https://www.cnblogs.com/lijunhao/p/15858430.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有