Skip to content

Instantly share code, notes, and snippets.

@dbalduini
Created September 13, 2021 19:15
Show Gist options
  • Save dbalduini/72794988f326db8c51d2af88fc943d36 to your computer and use it in GitHub Desktop.
Save dbalduini/72794988f326db8c51d2af88fc943d36 to your computer and use it in GitHub Desktop.
bit-array study
class BitSet:
"""
bit-array implementation
"""
def __init__(self, size):
# same as size / 32 (2^5)
self.arr = [0] * ((size >> 5) + 1)
def get(self, number):
i = number >> 5
# number & 31
bit_i = number & 0x1F
p = 1 << bit_i
print('get', self.arr[i], p)
return (self.arr[i] & p) != 0
def set(self, number):
i = number >> 5
# number & 31 / 0-31 = 32
bit_i = number & 0x1F
# move bit_i from 1 to the right
# 1 << 3 = 1 * 2^3
# 1 is 0000 0001
# 1 << 3 is 0000 0100 => 8
p = 1 << bit_i
print('!', i, self.arr[i], p)
self.arr[i] |= p
print('set', i, self.arr[i])
# store 32000 bits + 1
# since 1 int has 32bits, 32000 bits will store
# 1000 ints
bs = BitSet(32*1000)
bs.set(25)
bs.set(31)
print(bs.get(10))
print(bs.get(31))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment