この形式の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)のようなことを行う必要があります。