質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

533閲覧

Pythonでのbit全探索の実装

pussy_pussy

総合スコア22

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/07/22 08:33

編集2020/07/22 09:32

前提・実現したいこと

以下に記す単純な全探索のコードを理解したい。
for文の文法はわかっている。
if文の内容が何をしているかよくわからないので、そこを理解したい

該当のソースコード

N = 3 for i in range(1<<N): cond = [0]*N for j in range(N): if 1&(i>>j): cond[j] = 1 print(cond)

試したこと

ネットで解説をしらべて参考にした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2020/07/22 08:41

提示コードの出典(書籍、URLなど)があれば追記ください。
guest

回答1

0

ベストアンサー

まず、提示コードは間違っています。正しくは以下です。

Python

1for i in range(1<<3): 2 cond = [0,0,0] 3 for j in range(3): 4 if 1&(i>>j): 5 cond[j] = 1 6 print(cond)

上記のrange(1<<3):によって、0...72**3個の値が得られます。
つぎにポイントのif 1 & i>>j:は、たとえばi=5の場合、以下のように動作しています。

  • j = 0 にて 5 >> 0 の結果は5(b101)。それと1(b001) とのandの結果はTrue
  • j = 1 にて 5 >> 1 の結果は2(b010)。それと1(b001) とのandの結果はFalse
  • j = 2 にて 5 >> 2 の結果は1(b001)。それと1(b001) とのandの結果はTrue

よって[1,0,1]が得られます。
i=5以外も同様で、結果的に0...7の全ビット表現が得られます。

投稿2020/07/22 09:01

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pussy_pussy

2020/07/22 09:43

なるほど、1桁ずつずらして2進数表示のけたを1つずつ調べているのですね。 >>という論理演算子が使われたとき、〇>>の〇の数字は2進数表記で扱われるという理解でよろしいでしょうか(デフォルトで)
can110

2020/07/22 09:47

そうですね、二進表記というか数値として扱われます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問