布尔方程

The*_* do 1 c++ boolean-logic

为什么这段代码有两个不同的输出(GCC 4.5.1)(我评论过重要的一行):

int main()
{
    bool a = 1;
    bool b = 1;
    bool c = 1;
    bool a_or_b = (a || b);
    bool not_a_or_b = !a_or_b;
    bool not_a_or_b__c = not_a_or_b || c;
    cout << "(a || b): " << (a || b) << '\n';
    cout << "!(a || b): " << !(a || b) << '\n';
    cout << "!(a || b) || c: " << (!(a || b)) || c << '\n';//HERE I'M GETTING 0 (incorrectly I would say)
    cout << "bool vars:\n";//WHY THIS LINE IS PRINTED AFTER THE PREVIOUS LINE BUT NOT BELOW IT?
    cout << "(a || b): " << a_or_b << '\n';
    cout << "!(a || b): " << not_a_or_b << '\n';
    cout << "!(a || b) || c: " << not_a_or_b__c << '\n';//HERE I'M GETTING 1
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

ken*_*ytm 12

这是因为<<优先级高于||.使用括号对其进行分组.

cout << "!(a || b) || c: " << ((!(a || b)) || c) << '\n';
//                            ^                ^
Run Code Online (Sandbox Code Playgroud)