特定のビットが 1 または 0 であることを確認して、バイト フラグをチェックするにはどうすればよいですか?

必要なビットをテストするために使用できる関数は次のとおりです:

bool is_bit_set(unsigned value, unsigned bitindex)
{
    return (value & (1 << bitindex)) != 0;
}

少し説明:

ビット マスクを作成するには、左シフト演算子 (<<) を使用します。 (1 <<0) は 00000001 に等しくなり、(1 <<1) は 00000010 に等しくなり、(1 <<3) は 00001000 に等しくなります。したがって、0 のシフトは右端のビットをテストします。 31 のシフトは、32 ビット値の左端のビットになります。

ビット AND 演算子 (&) は、両側で 1 であるすべてのビットが設定された結果を返します。例:1111 &0001 =0001; 1111 &0010 ==0010; 0000 &0001 =0000. したがって、式 (value &(1 <

最後に、結果が非​​ゼロかどうかを確認します。 (これは実際には省略される可能性がありますが、明示したいと思います。)


@Daoksの回答の延長として

ビット操作を行うと、本当に ビット単位の演算子に関する確かな知識が役立ちます。

また、C のビットごとの「AND」演算子は & です 、したがって、あなたがしたいことは次のとおりです:

unsigned char a = 0xAA; // 10101010 in hex
unsigned char b = (1 << bitpos); //Where bitpos is the position you want to check

if(a & b) {
    //bit set
}

else {
    //not set
}

上記では、ビット単位の "AND" (C では &) を使用して、特定のビットが設定されているかどうかを確認しました。また、2 進数を定式化する 2 つの異なる方法を使用しました。上記のウィキペディアのリンクを確認することを強くお勧めします。


AND 演算子を使用できます。あなたが持っている例:10101010 で、3 番目のビットを確認したい場合:(10101010 AND 00100000) を実行し、00100000 を取得した場合、3 番目の位置に 1 のフラグがあることがわかります。