0000
- 1111
の範囲内のすべてのビットシーケンス(より良い名前がないため)に対して反復したいとします。私が24ビットにスケールアップしたいときは、すべての可能な順列を単純に計算することはできません。私はそれらをオンザフライで計算する必要があります。可能なすべてのビット順列を反復する
や装飾されたwhileループのようなものを使用して、オンザフライで(yield
のPythonジェネレータのような)パーミュテーションを生成するにはどうすればよいですか?
0000
- 1111
の範囲内のすべてのビットシーケンス(より良い名前がないため)に対して反復したいとします。私が24ビットにスケールアップしたいときは、すべての可能な順列を単純に計算することはできません。私はそれらをオンザフライで計算する必要があります。可能なすべてのビット順列を反復する
や装飾されたwhileループのようなものを使用して、オンザフライで(yield
のPythonジェネレータのような)パーミュテーションを生成するにはどうすればよいですか?
私が誤解していない限り、int(これはコアのビットとして保存されています)を使用すると、スペースが許す最大の整数(この場合は24ビット)。 0から始まり、連続するものを追加することは、潜在的なすべてのビットコンボを暗黙のうちにステップする。
何も事前に計算したり保存する必要はありません。ここでは4ビットの例です。この場合は
for(unsigned long int cnt = 0; cnt < 16; cnt++) DoSomething(cnt);
のdoSomething(& int型のconst unsigned long型)は、単にビットをマッピングし、あなたが探しているアクションを実行することができます。
実装でサポートされている場合は、明示的で正確な幅にはuint_32tタイプを使用してください。
あなたがグーグルでこれを見つけるなら、 '私は'のために '長い'を使用することを忘れないでください! –
ありがとうございました。 :) –
通常、ビットを扱うときは符号なしを優先します。また、最小限のビット数が必要なので、 'unsigned long'ではなく' uint32_t'(またはその変形の1つ)を使用することをお勧めします。 – Hurkyl
0b0000から0b1111までのカウントはどうですか? – Quentin
(int i = 0; i <1 << 24; ++ i)のループはできませんか?それはすべての必要なビットの組み合わせを行くだろう – buld0zzr