有没有什么能阻止这种形式的XOR测试?

时间:2010-07-05 13:12:58

标签: c++ bit-manipulation xor

是否有任何阻止这种形式的XOR测试的使用?

 bool result = false;
 bool b1 = false;
 bool b2 = false;

 ...

 if ( b1 ^ b2 )
 {
    result = true;
 }

3 个答案:

答案 0 :(得分:9)

我希望更清楚:

if ( b1 != b2 )
 {
    result = true;
 }

答案 1 :(得分:4)

不,这是完全可以接受的(如果您在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作为速记。

这里的另一个问题是,是否有什么东西阻止你自己尝试。

答案 2 :(得分:0)

我不确定这是个好主意。 ^是一个按位运算符而不是逻辑运算符。 所以1 ^ 2 = 3.我在C ++中有点生疏,但我认为bool存储为unsigned char或其他东西

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)