文書の過去の版を表示しています。
ビット演算
ビット集合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 |