仮説
組み込みデータ型のn番目のビット(「char」など)にアクセスまたは設定するためのC構文はありません。ただし、論理AND演算を使用してビットにアクセスしたり、論理OR演算を使用してビットを設定したりできます。
例として、1101を保持する変数があり、左から2番目のビットをチェックするとします。0100で論理積を実行するだけです。
1101
0100
---- AND
0100
結果がゼロ以外の場合は、2番目のビットが設定されている必要があります。それ以外の場合は設定されていません。
左から3番目のビットを設定する場合は、0010と論理ORを実行します。
1101
0010
---- OR
1111
C演算子&&(ANDの場合)および||を使用できます (ORの場合)これらのタスクを実行します。ビットアクセスパターン(上記の例では0100と0010)を自分で作成する必要があります。秘訣は、最下位ビット(LSB)が1をカウントし、次のLSBが2をカウントし、次に4をカウントすることを覚えておくことです。したがって、n番目のLSB(0から開始)のビットアクセスパターンは単純に2^の値です。 n。これをCで計算する最も簡単な方法は、バイナリ値0001(この4ビットの例)を必要な桁数だけ左にシフトすることです。この値は、符号なし整数のような量では常に1に等しいため、これは「1<<n」にすぎません。
例
unsigned char myVal = 0x65; /* in hex; this is 01100101 in binary. */
/* Q: is the 3-rd least significant bit set (again, the LSB is the 0th bit)? */
unsigned char pattern = 1;
pattern <<= 3; /* Shift pattern left by three places.*/
if(myVal && (char)(1<<3)) {printf("Yes!\n");} /* Perform the test. */
/* Set the most significant bit. */
myVal |= (char)(1<<7);
この例はテストされていませんが、一般的な考え方を説明するのに役立つはずです。