2011-09-19 104 views
4

这个代码布尔型操作

#include <iostream> 

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

    return 0; 
} 

显示我喜欢的类型 '布尔' 和 '的' 二进制 '操作< <'

无效操作数错误哪里不对?我无法理解这一点,请向我解释。我认为&&!是在C++中定义的。

那又怎么了?

回答

16

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

这意味着第二<<运营商正试图执行的(!t)和 'ENDL'。

<<具有更高的优先级比&&让你的cout语句执行这样的:

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

添加括号来解决这个问题:

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

here运营时的顺序报表没有按预期进行评估。

+0

非常感谢@mydogisbox它帮助了我太多 –

+0

@ user466534很高兴提供帮助。 – mydogisbox

6

添加括号来获得运营权的优先级:

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

等价的:

cout << false << endl; 
+0

我试过介绍新的bool m = t &&(!t),它的工作原理是 –

+1

@user:再次,运营商的优先级......查找它! –

2

你需要一些更多的括号:

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

问题是与运算符优先级,为&&具有优先级低于<<

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

同样对于任何bool可变t表达t && (!t)总是导致falset || (!t)总是导致true。 :)