布尔类型操作

时间:2011-09-19 12:59:18

标签: c++ boolean

此代码

#include <iostream>

using namespace std;
int main(){
  bool t=false;
  cout<<t &&(!t)<<endl;

  return 0;
}

显示我这样的错误

  

类型'bool'和''到二进制的无效操作数   '运营商LT;&LT;'

有什么问题?我无法理解这一点,请向我解释。我认为&&!是在c ++中定义的。

那有什么不对?

5 个答案:

答案 0 :(得分:16)

  

“类型'bool'和''到二进制'运算符的无效操作数&lt;&lt;'<”

这意味着第二个<<运算符正在尝试执行(!t)和'endl'。

<<的优先级高于&&,因此您的cout语句的执行方式如下:

(cout << t ) && ( (!t) << endl );

添加括号以解决此问题:

cout << (t && (!t) ) << endl ;

当语句未按预期评估时,查看here的操作顺序。

答案 1 :(得分:6)

添加括号以获得运算符的优先权:

cout << (t && !t) << endl;

等效地:

cout << false << endl;

答案 2 :(得分:3)

&&的优先级低于<<,因此该语句的评估结果为(cout << t) && (!t << endl);

C++ operator precedence

答案 3 :(得分:2)

您需要更多括号:

cout << (t && !t) << endl;

答案 4 :(得分:2)

问题在于运算符优先级,因为 &&的优先级低于<<

cout<<(t && (!t))<<endl;  // ok!

对于任何bool变量t,表达式t && (!t)始终会生成false,而t || (!t)始终会生成true。 :)