私はいくつかのビットフラグを持っています:
A = 1 (0001)
B = 2 (0010)
C = 4 (0100)
D = 8 (1000)
フラグにビット A と C を設定したいと思います。C
現在、私のフラグは 5 (0101) です。
フラグからビット C を削除する必要があります。これどうやってするの?
私はいくつかのビットフラグを持っています:
A = 1 (0001)
B = 2 (0010)
C = 4 (0100)
D = 8 (1000)
フラグにビット A と C を設定したいと思います。C
現在、私のフラグは 5 (0101) です。
フラグからビット C を削除する必要があります。これどうやってするの?
フラグをクリアするには、通常AND
、その補数を使用します。たとえば、C および関連言語では、次のようになります。
x = 5; // x = 0101
x = x & ~C; // x = x & 1011 = 0101 & 1011 = 0001
注: これは次のようにもう少し簡潔に表現できます。
x &= ~C;
または、特定のビットが 1 であることが既にわかっていて、それを 0 に設定したい場合は、XOR を使用してトグル (反転) することができます。
x = x ^ C; // x = x ^ 0100 = 0101 ^ 0100 = 0001
また:
x ^= C;
私の解決策は次のとおりです。
1) チェック、ビットが設定されている
flag & C == C
2) ビット セットが XOR 演算を適用する場合:
flag ^ C
現在、私のフラグは 5 (0001) です。
もっと簡単な解決策があるかもしれませんか?