3

私はいくつかのビットフラグを持っています:

A = 1 (0001)
B = 2 (0010)
C = 4 (0100)
D = 8 (1000)

フラグにビット A と C を設定したいと思います。C

現在、私のフラグは 5 (0101) です。

フラグからビット C を削除する必要があります。これどうやってするの?

4

2 に答える 2

5

フラグをクリアするには、通常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;
于 2013-03-13T14:29:02.203 に答える
0

私の解決策は次のとおりです。

1) チェック、ビットが設定されている

flag & C == C

2) ビット セットが XOR 演算を適用する場合:

flag ^ C

現在、私のフラグは 5 (0001) です。

もっと簡単な解決策があるかもしれませんか?

于 2013-03-13T14:08:53.890 に答える