pythonでbit全探索を実装する際に、N個のバイナリー値の組合せを考えるとした時
python
1for i in range(2 ** N): 2 for j in range(N): 3 if (i >> j) & 1: 4 (do something) 5
といった風に実装しますが、3行目について質問です。
iをjだけ右シフトした時、右端が1であるかを調べていると思うのですが、これは **&(AND)**のどのような仕様によるものでしょうか?
例えば、
python
1for i in range(10): 2 print(i, i & 1)
を実行すると
0 0 1 1 2 0 3 1 4 0 5 1 6 0 7 1 8 0 9 1
が得られます。この時もiを二進数で表した時、右端が1である数字に対して1が出力されるのですが、この挙動がどういうしくみなのか説明いただきたいです。ご教授よろしくお願いします。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。