代码之家  ›  专栏  ›  技术社区  ›  lsalamon

有没有什么东西可以阻止这种形式的XOR测试?

  •  1
  • lsalamon  · 技术社区  · 14 年前

    有没有什么东西可以阻止这种形式的XOR测试?

     bool result = false;
     bool b1 = false;
     bool b2 = false;
    
     ...
    
     if ( b1 ^ b2 )
     {
        result = true;
     }
    
    3 回复  |  直到 14 年前
        1
  •  9
  •   anon    14 年前

    我更喜欢更清楚的:

    if ( b1 != b2 )
     {
        result = true;
     }
    
        2
  •  4
  •   Mark Rushakoff    14 年前

    不,那是完全可以接受的(如果你拼写 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 作为速记。

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

        3
  •  0
  •   mb14    14 年前

    我不确定这是个好主意。^是位运算符,而不是逻辑运算符。 所以1 ^ 2=3。我在C++中有点生疏,但是我认为布尔是作为无符号的字符或其他东西存储的。

    bool a= 1
    bool b = 2
    

    是有效的。

    a == true; // yes
    b == true; // yes
    a ^ b == true; // yes.  not what you are expecting :-(
    

    要确保使用正确的真/假值,必须执行以下操作 (!A)^!B)