そこには 2 つの 16 ビット セクションがあります (最初の 3 つのフィールドと最後の 3 つのフィールドは 16 ビットです)。
それはたったの 65536 エントリです。したがって、フィールドのビット反転バージョンを保持するルックアップ テーブルがあります。これを簡単にするために、2 つの 16 ビット フィールドを持つ別の構造体との共用体で構造体をラップしますか?
次のようなもの(テストされていない、私はCコンパイラの近くにいません):
union u {
struct {
unsigned int b1:1;
unsigned int b2:8;
unsigned int b3:7;
unsigned int b4:8;
unsigned int b5:7;
unsigned int b6:1;
} bits;
struct {
uint16 first;
uint16 second;
} words
} ;
unit16 lookup[65536];
/* swap architectures */
void swapbits ( union u *p)
{
p->words.first = lookup[p->words.first];
p->words.second = lookup[p->words.second];
}
ルックアップ テーブルの人口は、読者の演習として残されています :)
ただし、コンパイラのドキュメントを注意深く読んでください。C 標準がその構造体を 1 つの単語に収めることを要求しているかどうかはわかりません (ただし、ほとんどのコンパイラはそうすると思います)。