文書の過去の版を表示しています。


ビット演算

ビット集合Gの全ての部分集合をイテレート

※φ以外

1
2
3
4
5
g = 0b11011010
h = # hが求める数となる
while h:
    print(f'{h:08b}')
    h = (h - 1) & g

結果

N個の内、K個のビットが立った数をイテレート

1
2
3
4
5
6
7
8
9
10
11
12
n = 8
k = 5
LIMIT = 1 << n
 
v = (1 << k) - 1  # ここからスタート(vが求める数となる)
 
while v < LIMIT:
    x = v & -v
    y = v + x
    print(f'v:{v:08b}  x:{x:08b}  y:{y:08b}  ~y:{bin(~y + (1 << 32))[-8:]}'
          f'  (v&~y):{(v & ~y):08b}  (v&~y)//x>>1:{(v & ~y) // x >> 1:08b}')
    v = (v & ~y) // x >> 1 | y

結果

programming_algorithm/bit_operation.1550046744.txt.gz · 最終更新: by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0