16 ビットの int があり、個々のビット コンポーネントの値を交換しようとしています。
例えば:
- 3 番目と 4 番目のビットの値を交換します。
- 5 番目と 6 番目のビットの値を交換します。
また、より複雑な価値移転の連鎖にも対処しなければなりません。
- 2ビット目の値を3ビット目に移動
- 3ビット目の値を1ビット目に移動
- 1ビット目の値を4ビット目に移動
- 4 ビット目の値を 2 ビット目に移動します。
これを行う賢明な方法はありますか?ビットは常に隣接しているとは限らないため、回転は特に実行可能ではないようです。現時点では、int をビットごとに (&s + >>s を連続して) 再構築することしか考えられませんが、それは特に効果的ではないようです。
私は今これを持っています:
// bit 2 to bit 3
temp_shape = 0;
temp_shape = l_shape & NegXFace;
temp_shape >>= 1;
resultShape |= temp_shape;
// bit 3 to bit 1
temp_shape = 0;
temp_shape = l_shape & PosYFace;
temp_shape <<= 2;
resultShape |= temp_shape;
// bit 1 to bit 4
temp_shape = 0;
temp_shape = l_shape & PosXFace;
temp_shape >>= 2;
resultShape |= temp_shape;
// bit 4 to bit 2
temp_shape = 0;
temp_shape = l_shape & PosYFace;
temp_shape <<= 2;
resultShape |= temp_shape;
// bits 5 and 6
temp_shape = 0;
temp_shape = l_shape & (PosZFace | NegZFace);
resultShape |= temp_shape;