github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/algorithm/datastructures/bitmap/bitmap.go (about)

     1  package bitmap
     2  
     3  type BitMap struct {
     4  	data []byte
     5  	len  int
     6  }
     7  
     8  // n表示存储数据的大小
     9  func NewBitMap(n int) *BitMap {
    10  	return &BitMap{
    11  		data: make([]byte, n/8+1),
    12  		len:  n,
    13  	}
    14  }
    15  
    16  const bitSize = 8
    17  
    18  type unit int
    19  
    20  const (
    21  	Bit unit = 1
    22  	B        = 8 * Bit
    23  	KB       = 1024 * B
    24  	MB       = 1024 * KB
    25  	GB       = 1024 * MB
    26  	TB       = 1024 * GB
    27  )
    28  
    29  func (b *BitMap) Set(k uint) {
    30  	if k > uint(b.len) { //超过存储范围
    31  		return
    32  	}
    33  
    34  	index := k / bitSize
    35  	var bit uint
    36  	bit = uint(k) % bitSize
    37  	b.data[index] |= 1 << bit
    38  }
    39  
    40  func (b *BitMap) Get(k uint) bool {
    41  	if k > uint(b.len) { //超过存储范围
    42  		return false
    43  	}
    44  	index := k / bitSize
    45  	var bit uint
    46  	bit = uint(k) % bitSize
    47  	return b.data[index]&(1<<bit) != 0
    48  }