почему логично и с изменением порядка выдают разный вывод? - PullRequest
0 голосов
/ 21 ноября 2018
#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 ]

0 голосов
/ 21 ноября 2018

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

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

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

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

}

output:

0
0

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

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

0 голосов
/ 21 ноября 2018

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

Ваши утверждения эквивалентны:

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

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

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