forked from wangzheng0822/algo
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbitmap.py
More file actions
30 lines (23 loc) · 705 Bytes
/
bitmap.py
File metadata and controls
30 lines (23 loc) · 705 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
"""
Author: Wenru Dong
"""
from typing import Optional
class Bitmap:
def __init__(self, num_bits: int):
self._num_bits = num_bits
self._bytes = bytearray(num_bits // 8 + 1)
def setbit(self, k: int) -> None:
if k > self._num_bits or k < 1: return
self._bytes[k // 8] |= (1 << k % 8)
def getbit(self, k: int) -> Optional[bool]:
if k > self._num_bits or k < 1: return
return self._bytes[k // 8] & (1 << k % 8) != 0
if __name__ == "__main__":
bitmap = Bitmap(10)
bitmap.setbit(1)
bitmap.setbit(3)
bitmap.setbit(6)
bitmap.setbit(7)
bitmap.setbit(8)
for i in range(1, 11):
print(bitmap.getbit(i))