C/C++ でバイト内のビットの順序を逆にする最も簡単な方法は何ですか? 質問する

C/C++ でバイト内のビットの順序を逆にする最も簡単な方法は何ですか? 質問する

バイト内のビット順序を反転する方法は複数ありますが、開発者が実装するのに「最も簡単」な方法は何か興味があります。反転とは、次のことを意味します。

1110 -> 0111
0010 -> 0100

これは次のものと似ていますが、重複ではありません。これPHP に関する質問です。

これは次のものと似ていますが、重複ではありません。これC の質問です。この質問は、開発者が実装する最も簡単な方法を尋ねています。「最適なアルゴリズム」は、メモリと CPU のパフォーマンスに関係しています。

ベストアンサー1

これは動作するはずです:

unsigned char reverse(unsigned char b) {
   b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
   b = (b & 0xCC) >> 2 | (b & 0x33) << 2;
   b = (b & 0xAA) >> 1 | (b & 0x55) << 1;
   return b;
}

まず、左の 4 ビットが右の 4 ビットと交換されます。次に、隣接するすべてのペアが交換され、最後に隣接するすべての単一ビットが交換されます。この結果、順序が逆になります。

おすすめ記事