Спонсорские ссылки
-
Статья
Версия для печати
Обсудить на форуме
Урок 8 С/С++. Инкремент и декремент.



Предыдущий урок-----Следующий урок


Мы уже рассматривали операции присваивания в форме х=10 или х=у*2х и т.п. Сейчас хотелось бы добавить немного об операциях присваивания.

Когда мы со значением переменной производили арифметическое действие и после записывали результат в эту же переменную, то мы это писали так:
      х=х+10

Язык С позволяет эту же операцию записать и по-другому: х+=10. Что меняется от такого написания? Во-первых, вам не нужно второй раз набирать имя той же переменной. В данном случае, у нас х и это большого значения не имеет, но имена ведь могут быть гораздо больше, то есть, длиннее. Естественно, можно его скопировать, но это все равно займет времени больше, чем второй вариант написания данной операции. Кроме того, компилятор вторые варианты написания обрабатывает немного быстрее. (Так говорят в литературе, правда ни Сашок, ни я не пробовали проверять это на практике). Такие операции называются сокращенными или составными присваиваниями.

К другим арифметическим операторам мы тоже можем применить сокращенное написание. Так, получим:
вместо х=х-2     х-=2
вместо х=х*2     х*=2
вместо х=х/2     х/=2
вместо х=х%2     х%=2.

Если помните, мы говорили, что в этих операциях есть 2 операнда: один слева - тот, которому присваивается значение, и второй - справа, чье значение присваивается левому операнду. Но оказывается, что это не единственный вид операции изменения и присваивания) в языке С. Существуют операции присваивания с ОДНИМ оператором. Такие операции называются унарными именно потому, что имеют один операнд. От латинского слова Uno, что значит "один".

Это операции инкремента и декремента (или увеличения и уменьшения). Операторы этих операций выглядят соответственно так: ++ и -- . Что же они делают? При операции увеличения значение операнда увеличивается на 1, а при операции уменьшения - уменьшается на 1.

Допустим, есть переменная х. Мы хотим применить к ней операцию инкремента. Возможно, учитывая наши прошлые знания и полученные сегодня в начале урока, мы бы написали так:
х=х+1  или    х+=1.

Но если вы точно уверены, что переменная ваша будет изменяться в большую или меньшую сторону только на 1, лучше будет использовать инкремент или декремент соответственно. И выглядеть это будет так:
х++     или    х--

Операнд может быть целого или плавающего типа. В любом случае он будет увеличиваться (уменьшаться) на единицу. Тип результата соответствует типу операнда. Cуществует две формы рассматриваемых операций: префиксная и постфиксная. Если операторы ++ или -- записаны после переменной (так, как написано выше) - это постфиксная форма. При этом последовательно происходят следующие действия:
  • старое значение переменной сохраняется для использования в дальнейшем выражении, в котором встретилась эта переменная;
  • и только ПОСЛЕ этого ее значение СРАЗУ ЖЕ изменяется на 1.

Если эти  операторы записаны перед переменной, вот так:
++х     или    --х,
то это префиксная форма. При этом последовательность действий такая:
  • СНАЧАЛА переменная изменяется на 1;
  • и только после этого используется в выражении.

На примере будет понятнее. Рассмотрим его:
      int t=1, z;
      z=(t++)*5;


В начале происходит умножение t*5, а затем увеличение t. В результате получится z=5, t=2.
      int s=2, f;
       f=(++s)/3;


В начале значение s увеличивается, а затем используется в операции деления. В результате получим s=3, f=1.

Обратите внимание!
  • Когда инкремент или декремент выполняются как совершенно отдельный от других выражений оператор, то префиксная и постфиксная форма приводят к одинаковому результату, то есть, при таком использовании нет никакой разницы, где мы пишем оператор.
  • Нельзя использовать в операции инкремента или декремента сложный операнд, представляющий собой выражение. Можно только простую переменную. Написать ++(у-1) будет ошибкой.

Задания.
1. Чтобы рассмотреть это подробнее, предлагаю сделать маленькую программку. Для этого вам достаточно будет тех операторов, которые мы уже разобрали ранее.
  • Объявите переменную целого типа
  • присвойте ей значение 5
  • Выведите его на экран
  • Выполните  с переменной операцию постфиксного инкремента и выведите результат на экран (напишите это в одной строке)
  • Выведите на  экран значение переменной еще раз.
  • Вновь присвойте этой переменной значение 5
  • Выведите его на экран
  • Выполните  с переменной операцию префиксного инкремента и выведите результат на экран (напишите это в одной строке)
  • Выведите на  экран значение переменной еще раз.
  • Сделайте выводы из результатов работы программы ?)

2. Определите значения каждой переменной после операции, если в начале операции все переменные имеют значение равное 5:
  •    p*=x++
  •    q/=++x
  •    w=(--x)+(w--)
  •    k+=((--x)--)+10
Версия для печати
Обсудить на форуме