注意: この記事は読んでも役に立ちません。頭を無駄に使いたい人向け。 普通のループは、たとえば 0 から 255 までなら、0 -> 1 -> 2 -> ... というようにループする。 そういう普通のループじゃなくて、ビットを逆転させた数字でループできたらいいのになぁということが最近あった。 0 -> 128 -> 64 -> ... のように。 探してみると、そういうページが見つかった。 さすがネットは広い。 コードは以下の通り。 int r = 0; // counter int s = 0; // bit-reversal of r/2< int N = 256; // N can be any power of 2 int N2 = N << 1; // N<<1 == N*2 do { printf("%u ", s); r += 2; s ^= N - (N / (r&-r)
![ビット逆転ループ - アスペ日記](https://cdn-ak-scissors.b.st-hatena.com/image/square/abd0afa1ed9901d9dc1a0e107eaaf7c4f35ac4b9/height=288;version=1;width=512/http%3A%2F%2Fecx.images-amazon.com%2Fimages%2FI%2F41DYYQAGRDL.jpg)