1. ホーム
  2. c++

[解決済み] C++でブール値にビット演算子を使用する

2023-04-16 06:36:20

質問

C++で"bool"の値にビット演算子&、|、^を使用しない理由はありますか?

私は時々、2 つの条件のうちのちょうど 1 つが真になるようにしたい状況に遭遇します (XOR)。また、結果が真であるかどうかにかかわらず、条件のすべての部分が評価されることを望むことがあるので (短絡的に判断するのではなく)、私は & と | を使用します。また、ブール値を累積する必要がある場合もあり、&=と|=は非常に便利です。

私はこれを行うとき、いくつか眉をひそめられたことがありますが、コードはまだ意味があり、そうでない場合よりもきれいです。これらをブールに使用しない理由はあるのでしょうか。このために悪い結果を与える最近のコンパイラーはありますか?

どのように解決するのですか?

|| そして && はブール演算子で、組み込みのものはどちらかを返すことが保証されています。 true または false . それ以外はありません。

| , &^ はビット演算子です。操作する数値のドメインが1と0だけであれば、両者は全く同じですが、C言語のようにブーリアンが厳密に1と0でない場合、望まない動作になってしまうことがあります。たとえば

BOOL two = 2;
BOOL one = 1;
BOOL and = two & one;   //and = 0
BOOL cand = two && one; //cand = 1

しかし,C++では bool 型のどちらかのみであることが保証されています。 true または false (に暗黙のうちに変換されます)。 10 など)なので、このスタンスでは心配は少ないのですが、人々がコードでこのようなものを見るのに慣れていないという事実が、それをしないことの良い論拠となります。単に b = b && x と言って終わりです。