ビットフィールド
C言語での実装例:
C/C++では符号付き整数に対するビット演算は処理系定義の動作となるケースがあるので、符号無し整数を用いるべきである。
2の冪乗を表すために0x08のようなハードコードされた数値を使用する代わりに、1 << 3のようなビットシフト演算子を使用した表現を使用すると、ビットマスクを示すものであるというプログラマの意図が明確になり、可読性の観点からすると望ましい。なお、C++14以降では0bプレフィックスを付けることで、0b00001000のような2進数リテラルを記述することもできる。C23にも同様の2進数リテラル表記が導入される予定である。
カーニハンとリッチーの書籍『プログラミング言語C』では、直接フィールドを定義し、アクセスする方法が記述されている。この方法を使用することで、ビット演算子が不要となり、ビットメンバに構造体メンバと同じようにアクセスすることができる。
struct を使用した例:
構造体のビットメンバは実用上の欠点がある。まず、メモリ上のビットの順序すなわちエンディアンはコンパイラ(およびターゲットとなるプロセッサアーキテクチャ)によって変化する。
ビットフィールド (英: bit field) は、プログラミングにおいてブーリアン型のフラグをコンパクトなビットの並びとして格納する手法である。ビットフィールドの格納には、整数型を使用する。個々のフラグは、ビット単位で格納される。通常は、ソースコードで、個別のビットがフラグに対応する意味を付けられた、2の冪乗の定数が定義される。ビット演算の論理積・論理和・否定の組み合わせが、フラグのセット・リセットとテストを行うために使われる。
ビットフィールドはビット配列(英語版)とは異なる。ビット配列は、整数でインデックスを付けられた大きなビットの集合を保存するために使用され、コンピュータ言語でサポートされる整数型よりも大きいことがある。一方、ビットフィールドは典型的にはワードサイズの範囲内であり、各ビットを参照する表記法は数値によるインデックスから独立している。ただし、ビットフィールドを用いるよりも、それぞれのフラグのビットインデックスが列挙型の値であるようなビット配列を使用することで、安全かつ簡潔で、高速に動作する実装となる。