逻辑运算符不输出正确的结果
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);
会更清楚。
这是我正在努力处理的代码
#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);
会更清楚。