それはこのように動作します:
最初に注意するのは、Cテストでは値0が偽であり、他の値はすべて真と見なされることです。
次に、特定のビットが設定されているかどうかをテストするには、次のようなテストを使用します(数年前に作成したマクロのセットの1つ)
#define IS_SET(number, position) (number & (1 << position))
次に、次のように使用できます。
if(IS_SET(15,2)){ }
。ただし、ビットカウントは右端のビットから始まり、右端のビットから数えて左に向かって移動することに注意してください0
。
以下は、マクロが実際にどのように機能するかです(これは、8ビット、16ビット、32ビットなどのすべての整数タイプで機能することに注意してください)ビット単位の数値15
は0x0F = 0000 0000 0000 0000 0000 00000 1111 1111
、32ビットマシン上にあります。
左シフト1
2回、yeilds0000 0000 0000 0000 0000 0000 0000 0100
2つの数値をANDすることで次のようになります。
0000 0000 0000 0000 0000 0000 1111 1111
0000 0000 0000 0000 0000 0000 0000 0100 &
------------------------------------------
0000 0000 0000 0000 0000 0000 0000 0100 (which is not 0, hence true)
------------------------------------------
このようにして、設定またはクリアするビットシーケンスの任意の位置をテストできます。