ビット演算

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

※φ以外

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

結果

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

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

結果

このウェブサイトはクッキーを使用しています。 Webサイトを使用することで、あなたはあなたのコンピュータにクッキーを保存することに同意します。 また、あなたはあなたが私たちのプライバシーポリシーを読んで理解したことを認めます。 同意しない場合はウェブサイトを離れてください。クッキーに関する詳細情報
programming_algorithm/bit_operation.txt · 最終更新: 2019/02/13 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0