@unit_911

Почему префиксный инкремент в логическом выражении не прибавляет единицу после вычисления?

int i, l, j, k;
    i = l = j = k = 0;
    int a = i++ && ++j || k || l++;

Ожидается, что вывод будет:i = 1 l = 1 j = 1 k = 0 a = 0
Однако он таков:i = 1 l = 1 j = 0 k = 0 a = 0

Почему постфиксный инкремент в логическом выражении увеличился на единицу, а префиксный - нет?
  • Вопрос задан
  • 39 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что i++ == 0, что приводится к false. Значит второй член конъюнкции (++j) вычислять смысла нет, результат от него не зависит. Первый член дизъюнкции false, значит вычисляем второй (k == 0). Он тоже false, поэтому вычисляем третий (l++) и берём его значение как результат выражения.
В общем, конъюнкция (&&) вычисляется до первого встреченного false, дизъюнкция (||) - до первого встреченного true.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы