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 }