この形式のXORテストの使用を妨げるものはありますか?
bool result = false; bool b1 = false; bool b2 = false; ..。 if(b1 ^ b2) {{ 結果=true; }
この形式のXORテストの使用を妨げるものはありますか?
bool result = false; bool b1 = false; bool b2 = false; ..。 if(b1 ^ b2) {{ 結果=true; }
私はもっと明確にしたいと思います:
if ( b1 != b2 )
{
result = true;
}
いいえ、まったく問題ありません ( :]false
で正しくつづれば)。bool b2
#include <iostream>
int main()
{
if (false ^ false)
{
std::cout << "false ^ false" << std::endl;
}
if (true ^ false)
{
std::cout << "true ^ false" << std::endl;
}
}
出力:true ^ false
もちろん、あなたが提供した例ではresult = x1 ^ x2
、速記として行うこともできます。
ここでのもう 1 つの質問は、これを自分で試すことを妨げる何かがあったかどうかです。
それが良い考えかどうかはわかりません。^はビット演算子であり、論理演算子ではありません。したがって、1 ^ 2=3です。C++では少し錆びていますが、boolはunsignedcharなどとして格納されていると思います。
bool a= 1
bool b = 2
有効です。
a == true; // yes
b == true; // yes
a ^ b == true; // yes. not what you are expecting :-(
適切なtrue/false値を使用するには、(!! a)^(!! b)のようなことを行う必要があります。