условный оператор в вопросе C - PullRequest
3 голосов
/ 19 мая 2010

У меня просто быстрый вопрос об условном операторе. Все еще начинающий программист здесь. Мне дано x = 1, y = 2 и z = 3.

Я хочу знать, почему после этого утверждения:

y += x-- ? z++ : --z;

То, что y равно 5. Значения после оператора: x = 0, y = 5 и z = 4. Я знаю, что условный оператор работает так: он отформатирован так: переменная = условие? значение, если true: значение, если false.

Для условия y + = x--, как y становится 5? Я вижу только 2 (2 + = 0) и 3 (2 + = 1) (тогда x-- становится равным нулю) как возможности. Буду признателен за любую оказанную помощь. :)

Ответы [ 13 ]

0 голосов
/ 19 мая 2010

Помните, что операторы увеличения и уменьшения возвращают разные вещи в зависимости от того, помещены ли они до или после имени переменной.

В частности, когда оценивается x--, оно уменьшается x на 1, но возвращает неизмененное значение x, которое в данном случае равно 1. В C 1 оценивается как истина, поэтому троичный оператор вернет z++.

И снова, поскольку оператор ++ помещается после переменной, возвращаемое значение z++ является неизмененным значением z, что равно 3.

Таким образом, это сводится к y += 3, в результате чего y составляет 5.

0 голосов
/ 19 мая 2010

x-- будет означать, что выражение вычисляется при текущем значении x, а после этого x уменьшается на 1. То же самое происходит с Z ++. Это обратный способ для --z, что означает, что он оценивается с новым значением z.

Таким образом, во время оценки x равно 1, z равно 3. и после вычисления выражения x становится 0 и z 4; и у = 2 + 3 = 5

0 голосов
/ 19 мая 2010

Причина этого в том, что оператор пост-декремента / приращения (x++ или x--) выполняет следующее:

  1. увеличить или уменьшить переменную
  2. возвращает оригинальное значение.

Таким образом, возвращаемое значение x-- равно 1, что указывает на true, поэтому оператор z++ вычисляется, возвращая исходное значение 3.

Поскольку y = 2, y += 3 равно 5.

...