首页 > 解决方案 > 为什么逻辑和顺序改变会给出不同的输出?

问题描述

#include<iostream>
using namespace std;
int main(){

    cout<<-1&&0; //output is -1

    cout<<0&&-1; //output is 0
    return 10;        
}

我完全理解第二个输出,但无法理解第一个输出。如第二个输出和第一个操作数为 0,那么它不评估第二个运算符并给出 0,但首先它评估-1(这是真的,因为它不是零)然后它有评估 0 并给出 0 作为结果而不是 -1。

标签: c++c++11logical-operators

解决方案


您是误解运算符优先级的受害者。运算符<<的优先级高于&&,因此将在&&is 之前对其进行完全评估。

您的陈述相当于:

   (cout << -1) && 0;
   (cout << 0) && -1;

如果你想&&先评估,你需要这样做:

   cout << (-1 && 0);
   cout << (0 && -1);

推荐阅读