1

私はビット操作に関してはc++の初心者であり、完全な初心者であり(基本的なことしか知りません)、ドキュメントのステータスをビットフィールドに保持する必要があるプロジェクトに取り組んでいます。

つまり、flag2を無条件に削除しながら、flag1の最後の状態を保持したいのです。私が今持っているのはこのようなものです:

ビットフィールド|=flag1; ビットフィールド&=〜flag2;

問題は、1つのステートメントでそれを実行する方法はありますか?

私の場合、私は実際にこれらを次のように切り替えることはできません:

ビットフィールド^=(flag1 | flag2)

頭に浮かんだのは明らかな答えでしたが、問題は、flag1が設定されている場合と設定されていない場合があり、flag2を削除しながら最後の関数呼び出しから受け取ったときに保持したいということです。

ご協力いただきありがとうございます!

4

1 に答える 1

2

あなたは明らかにすることができます

 bitfield = (bitfield | flag1) & ~flag2;

カンマ演算子を使用できます。例:

 (bitfield |= flag1), (bitfield &= ~flag2);
于 2012-11-05T22:09:24.347 に答える