私はレジスタと、すべてをビット インデックスに変換するデータ シートを少し扱います。幸いなことに、バイナリリテラル拡張構文を持つgccを使用しているため、次のようなことができます
register |= 0b01000010;
他のオプションはもちろん、16進形式を使用することです
register |= 0x42;
時間の経過とともに 16 進数を少し扱ってきましたが、この種のビット バンギングにはバイナリ形式の方が適していることがわかりました。4 と 2 のニブルを 0100 と 0010 のパターンに分解します。なので、バイナリ形式の方が見やすいと思います。ただし、バイナリ形式の問題は、境界を見つけるのが難しいことです。16 進形式を使用すると、ニブルが適切に分離されるため、ビットをより安全に "インデックス" できる場合があります。IOW、一番上で、余分な 0 を追加または省略しなかったため、ビット 6 ではなくビット 7 がオンになってしまうのではないかと心配する必要があります。
他の人が自分のケーキを持って食べるテクニック/トリックを開発したかどうか、私は興味があります. C で隣接する定数をストリングする必要がある場合
"Hello " "World"
コンパイラは、それらを 1 つのリテラルにマッシュアップするのに十分スマートです。これらの 2 進数で同様のことを行う方法があればいいのですが、たとえば、
0b0100 0010
マクロで奇妙なことをすることができます、おそらく
#define _(a, b) (((a) << 4) | (b))
そして、できるようになる
_(0b0100,0b0010)
しかし、それは正直言ってもっと悪いことであり、ニブルのペアに限定されています. 誰かが何か賢くて素敵なものを思いついたら、興味があります。