逻辑运算符不能输出正确的结果

0 c++ logical-operators

这是我正在努力解决的代码

#include <iostream>
#include <string>

using namespace std;

int main() {
    int a{ 6 }, b{ 9 };
    cout << !(a < 5) && !(b >= 7);
}
Run Code Online (Sandbox Code Playgroud)

每次我运行这段代码时,它都会输出 1。为什么它不输出 0?

Spe*_*cer 5

您已经被我们在 C++ 中为运算符提供的语义重载所困扰<<

该运算符来自 C,专门用于对整数进行位移位。

因此,它的优先级低于运算符&&。C++ 使用运算符<<进行流插入并没有改变这一点。将会<<在 之前进行评估&&

因此

cout << !(a < 5) && !(b >= 7);
Run Code Online (Sandbox Code Playgroud)

首先将!(a<5)(true, since a==6) 插入流中,打印1. 然后它评估该值的返回值(对 的引用cout),将其转换为布尔值,然后评估&&(本质上是(!cout.fail() && !(b>=7))),丢弃结果。

您需要更多括号:

cout << (!(a < 5) && !(b >= 7));
Run Code Online (Sandbox Code Playgroud)

然而,

cout << (a>=5 && b < 7);
Run Code Online (Sandbox Code Playgroud)

会更清楚。