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

Logical operators don't output correct results

这是我正在努力处理的代码

#include <iostream>
#include <string>

using namespace std;

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

每次我运行这段代码输出1,为什么不输出0?

您被我们在 C++ 中赋予 << 运算符的语义重载绊倒了。

这个运算符来自 C,它专门用于 bit-shifting 整数。

因此,它的 precedence 低于 && 运算符。 C++ 使用 << 运算符进行流插入并没有改变这一点。 << 将在 &&.

之前计算

因此

cout << !(a < 5) && !(b >= 7);

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

您需要更多括号:

cout << (!(a < 5) && !(b >= 7));

然而,

cout << (a>=5 && b < 7);

会更清楚。