この質問のタイトルが示すように、整数 (特に 64 ビット符号なし) 内でビットのブロックを混合する最良の方法を知りたい
たとえば、私は 8 ビットの整数を持っています。ここで、ビットは 0000 1111 で、4 ビットを 4 ビットで混ぜます = 0101 0101
例 2: 0010 0110
0 1 1 0 右 0.0.1.0 左 = 00011100 4 ビットを 4 ビットずつ混合 = 0001 1100 簡単には、 . 右ブロックのビットで満たされた場所
私が今していること:
uint64_t mix32(uint64_t v) {
uint64_t ret=0;
int x=0;
for(int i=0; i<32; i++) {
setbit(ret, x, getbit(v, i));
x++;
setbit(ret, x, getbit(v, i+32));
x++;
}
return ret;
}
setbit は、特定の位置のビットを設定またはクリアするマクロです。正確に必要な のは、各 32 ビットを次の 32 ビットと混合する、各 16 ビットを次の 16 ビットと混合する、各 16 ビットを次の 16 ビットと混合する、各 8 ビットを次の 8 ビットと混合する などです。私はグーグルでよく見ましたが、そのようなシナリオを示さないチュートリアルで終わりました。
元気でね。