【问题标题】:boolean type manipulation布尔类型操作
【发布时间】:2011-09-19 12:59:17
【问题描述】:

这段代码

#include <iostream>

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

  return 0;
}

显示这样的错误

'bool' 和 '' 类型的无效操作数到二进制 '操作员

怎么了?这个我看不懂,请给我解释一下。我认为&amp;&amp;!是在c++中定义的。

那么有什么问题呢?

【问题讨论】:

    标签: c++ boolean


    【解决方案1】:

    “'bool'和''类型的无效操作数到二进制'operator

    这意味着第二个&lt;&lt; 运算符正试图在 (!t) 和 'endl' 上执行。

    &lt;&lt; 的优先级高于&amp;&amp;,因此您的 cout 语句执行如下:

    (cout &lt;&lt; t ) &amp;&amp; ( (!t) &lt;&lt; endl );

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

    cout &lt;&lt; (t &amp;&amp; (!t) ) &lt;&lt; endl ;

    查看here 查看语句未按预期计算时的操作顺序。

    【讨论】:

      【解决方案2】:

      添加括号以获得正确的运算符优先级:

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

      等价:

      cout << false << endl;
      

      【讨论】:

      • @user:再一次,运算符的优先级...查一下!
      【解决方案3】:

      &amp;&amp; 的优先级低于&lt;&lt;,因此该语句被评估为(cout &lt;&lt; t) &amp;&amp; (!t &lt;&lt; endl);

      C++ operator precedence

      【讨论】:

        【解决方案4】:

        你需要更多的括号:

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

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-10-02
            • 1970-01-01
            • 1970-01-01
            • 2017-10-15
            • 2014-03-23
            • 2012-10-02
            • 2018-07-23
            相关资源
            最近更新 更多