ИЛИ и И операция в C - PullRequest
       22

ИЛИ и И операция в C

6 голосов
/ 25 июня 2011

У меня есть сомнения в программе ниже.

int main()
{
    int i = -3,j = 2, k = 0,m;
    m = ++i || ++j && ++k;
    printf("%d %d %d %d\n", i, j, k, m);
    return 0;
}

Я получаю вывод как -2 2 0 1.

В операции ИЛИ, если 1-е значение истинно, тогда оно не будет оцениваться2-й, так что i = -2 и j =2.Затем наступает операция И.Он проверит оба значения на true. Так что если k = 1, то m = 1.Таким образом, вывод должен быть -2 2 1 1.Я бегу и проверяю и получаю вывод как -2 2 0 1, но я не мог понять, как.

Ответы [ 2 ]

8 голосов
/ 25 июня 2011

Вы использовали короткое замыкание или.Поскольку ++ i оценивается как -2, что не равно 0, оно замыкает накоротко и не оценивает остальную часть выражения.В результате ни j, ни k не увеличиваются.

Также обратите внимание, что операторы короткого замыкания, ||и &&, остаются ассоциативными, и что ||имеет более высокий приоритет, чем &&.В результате ||оценивается первым и ранними аутами, если левая сторона оценивается как true, а && ранними аутами, если левая сторона оценивается как false.

РЕДАКТИРОВАТЬ: Исправлена ​​ошибка с объяснением приоритета.

6 голосов
/ 25 июня 2011

Ничего после || не оценивается, так как результат выражения ++i отличен от нуля.

...