ビット配列は、ビット単位の演算子を使用して個々のビットを読み取る単純なバイト配列です。
1バイトのchar
変数があるとします。これには8ビットが含まれています。値1を使用してビット単位のAND演算を実行することにより、最下位ビットが真であるかどうかをテストできます。
char a = /*something*/;
if (a & 1) {
/* lowest bit is true */
}
これは1アンパサンドであることに注意してください。論理積演算子とは完全に異なり&&
ます。これが機能a & 1
するのは、最初のビットを除くすべてのビットが「マスクアウト」a & 1
されるため、の最下位ビットが1の場合に限り、ゼロ以外になりa
ます。同様に、2番目に下位のビットが2とAND演算されることで、真であるかどうかを確認できます。 3番目は、2の累乗を継続するために、4などとAND演算します。
したがって、32,768要素のビット配列は4096要素のバイト配列として表されます。最初のバイトはビット0〜7を保持し、2番目のバイトはビット8〜15を保持します。チェックを実行するために、コードはバイトを選択します。チェックしたいビットを含む配列から、ビット単位の操作を使用してバイトからビット値を読み取ります。
他のデータ型と同様に、操作が何であるかに関しては、値の読み取りと書き込みを行うことができます。上記の値の読み方と以下の値の書き方を説明しましたが、ビット演算の理解に本当に興味がある場合は、最初の文で提供したリンクを読んでください。
ビットの書き込み方法は、0と1のどちらを書き込むかによって異なります。1ビットをバイトに書き込むにa
は、AND演算の逆を実行します。たとえば、OR演算です。
char a = /*something*/;
a = a | 1; /* or a |= 1 */
a
この後、前に設定されたかどうかに関係なく、の最下位ビットが1に設定されます。繰り返しますが、1を2に置き換えるか、3番目を4に置き換えることで、これを2番目の位置に書き込むことができ、2の累乗の場合も同様です。
最後に、ゼロビットを書き込むには、書き込みたい位置の逆とANDを使用します。
char a = /*something*/;
a = a & ~1; /* or a &= ~1 */
これで、以前の値に関係なく、の最下位ビットがa
0に設定されます。これが機能するのは、最下位以外~1
のすべてのビットが1に設定され、最下位がゼロに設定されるためです。これにより、最下位ビットがゼロに「マスクアウト」され、残りのビットはそのままになります。a