Почему логично и с изменением порядка выдают разный вывод?
#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 печатается со второй строки.