Почему логично и с изменением порядка выдают разный вывод?

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

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

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

я полностью понимаю второй вывод, но не могу понять первый вывод. Так как во втором выводе и первом операнде 0, то он не оценивает 2-й оператор и дает 0, но сначала он оценивает -1(что верно, так как он не равен нулю), затем оценить 0 и дать 0 в качестве результата, а не -1.

2 ответа

Решение

Вы стали жертвой неправильного понимания приоритета оператора. Оператор << имеет более высокий приоритет, чем &&и поэтому он будет полностью оценен до && является.

Ваши заявления эквивалентны:

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

Если вы хотите && Чтобы оценить в первую очередь, вам нужно сделать это:

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

Это вопрос порядка операций. Если вы добавите круглые скобки вокруг логических операций, то код имеет смысл:

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

    cout << (-1 && 0) << endl; //output is -1

    cout << (0 && -1) << endl; //output is 0
    return 10;

}

выход:

0
0

В исходном коде << и -1 оцениваются перед -1 && 0.

Следовательно, -1 печатается из первой строки, а 0 печатается со второй строки.

Другие вопросы по тегам