Операции инкрементадекремента


Инкремент и декремент

Операции ++ и — выполняют инкремент и декремент. Операция инкремента увеличивает значение операнда на единицу, а операция

декремента уменьшает значение операнда на единицу. Например, выражение

с операцией инкремента можно переписать так:

Аналогично следующее выражение:

равнозначно приведенному ниже выражению

Эти операции могут быть записаны в постфиксной форме, когда операция следует за операндом, а также в префиксной форме, когда операция предшествует операнду.

Рассмотрим разницу в использовании префиксного и постфиксного инкремента Java на следующем примере. Разница будет только тогда, когда инкремент используется в другой операции.

Например, при выполнении строки int b = a++; сначала значение из переменной а будет записано в переменную b и только потом произойдет инкремент (постфиксная форма означает после). Поэтому переменной b будет присвоено значение 1. Смотрим на следующую строку — int c = ++a; — в этом случае сначала выполнится инкремент (префиксная форма означает до), а уже потом новое значение из a будет записано в переменную с .

Когда инкремент не участвует в другой операции, например как в строке c++ , не имеет значения напишите вы префиксную или постфиксную форму.

Результат выполнения программы:

Над переменной типа char тоже можно производить операцию инкремента. При этом инкремент производится над кодом символа. Символы в таблице Unicode размещены по алфавиту, поэтому при выполнении операции инкремента над символьным значением, мы получаем следующий по алфавиту символ:

Операции инкремента и декремента

Операторы префиксных (++х, —х) и постфиксных (х++, х—) инкремента/декремента влияют на свои операнды. Они различаются между собой моментом выполнения инкремента/декремента при вычислении выражения. В префиксной форме (++х, —х) инкремент/декремент выполняется до использования значения при вычислении выражения, поэтому значение выражения отличается от значения операнда. В постфиксной форме (х++, х—) инкремент/декремент выполняется после использования значения при вычислении выражения, поэтому значение выражения совпадает со значением операнда.

Оператор префиксного инкремента (++)/декремента (––) добавляет/вычитает единицу к операнду, который должен иметь l — value значение типа, отличного от const; результатом выражения является это инкрементированное/ декрементированное l — value значение того же типа, как у операнда.

В результате применения постфиксного оператора инкремента (++)/декремента (––) значение операнда увеличивается/уменьшается на одну единицу соответствующего типа, но значение выражения вычисляется до применения соответствующего оператора, а операция инкремента/декремента выполняется после вычисления операнда. Эта особенность возникает, только когда постфиксная операция инкремента/декремента выполняется в контексте выражения. Операнды для постфиксных операторов декремента должны иметь изменяемые (без модификатора const) l — value начения арифметического или указательного типа. Результат имеет такой же тип, как и постфиксное-выражение.

Если постфиксный оператор применяется к аргументу функции, то инкремент/декремент значения аргумента необязательно будет выполнен до его передачи в функцию.

Операнд типа указателя инкрементируется или декрементируется на значение размера объекта, к которому он относится. Инкрементированный указатель указывает на следующий объект, а декрементированный — на предыдущий.

тип операции операция содержание примеры
++x увеличение значения операнда на 1 до использования его значения a=1; q = 2* ++a; àa=2; q=4
—x уменьшение значения операнда на 1 до использования его значения a=1; q = 2* —a; à a=0; q=0
x++ увеличение значения операнда на 1 после использования его значения a=1; q= 2*a++; à q=2; a=2;
x— уменьшение значения операнда на 1 после использования его значения a=1; q= 2*a—; à q=2; a=0

Правило :

  1. при самостоятельном использовании префиксная и постфиксная операции выполняются одинаково, т.е. не важно, где стоит знак операции (++k, k++);
  2. в выражениях префиксная и постфиксная операции различаются:

в случае префиксной операции сначала изменяется значение переменной, перед которой стоит операция, а затем используется новое измененное значение;
в случае постфиксной операции сначала используется старое значение переменной, после которой стоит операция, затем оно изменяется;

  1. не применять ++ и — к переменной, присутствующей более чем в одном аргументе функции (например, printf (“……..”, a, a * a++);).
  2. не применять ++ и — к переменной, которая входит в выражение более одного раза (например, k = a / 2 + 5 * (1 + a++);).
  3. операнд не может быть константой, применять операцию только к переменным.
  4. операндом может быть только l — value -выражение ( ++(j + k) – неверная запись).


Операции равенства

Действие операций соответствует их математическому пониманию. Результатом операций является логическое значение true или false. Операции используются при формировании условий в условных операторах и циклах. Операции имеют одинаковый приоритет, более низкий, чем арифметические операции и операции отношения, и выполняются «слева направо».

тип операция примеры
бинарные == != a != b == c à (a != b) == c 1 2

. Ошибочное употребление символа присваивания = вместо знака операции равно == приводит к семантическим ошибкам.

. Обратите внимание, что если int i=44, а int j=24, то запись (i==j) дает значение false, а (i=j) дает значение true. Объясните, почему.

Сравнение на равенство вещественных чисел имеет свои особенности.

Примеры сравнения вещественных чисел на равенство:

x += 0.5; // значение x 1.5 имеет тип float

bool b = (x == 1.5); //константа 1.5 имеет тип double

// значение x и константа 1.5 представляются в 2 с/с точно, поэтому

Дата добавления: 2020-10-15 ; просмотров: 158 | Нарушение авторских прав

Операции инкремента (++) и декремента (—)

Читайте также:

  1. I. Понятие банковской операции. Виды банковских операций и сделок.
  2. VI. Операции уполномоченных банков с валютными ценностями.
  3. XIII. Файловая структура ОС. Операции с файлами
  4. Агентские операции.
  5. Аддитивные операции
  6. Алгебраические операции на множестве целых чисел.
  7. АРИФМЕТИЧЕСКИЕ ВЫРАЖЕНИЯ И ОПЕРАЦИИ
  8. Арифметические операции над комплексными числами.
  9. Арифметические операции над числами, представленными с фиксированной точкой
  10. Банковская система и ее элементы. Основные принципы банковской системы. Банковские операции и банковская деятельность
  11. Банковские операции и другие сделки кредитной организации
  12. Банковские операции и сделки

В С++ существует унарная операция инкремента ++ (увеличение на 2) и унарная операция декремента –(уменьшение на 1).

Если знак стоит перед переменной, слева ++к, то это префиксная операция, если справа к++, то постфиксная. В следующей таблице показаны эквивалентные операции.

i++ i=i+1 i+=1
++i i=i+1 i+=1
i— i=i-1 i-=1
—i i=i-1 i-=1

Операторы инкремента и декремента компилируются непосредственно в их ассемблерные эквиваленты. А вот выражение i=i+1 не будет переведено в такой эффективный машинный код.

В использовании постфиксной и префиксной операции есть существенная разница. Если переменная инкрементируется или декрементируется с помощью префиксной операции ++i , то она изменяет своё значение перед тем, как будет использоваться в остальной части выражения. При постфиксной форме в выражении используется текущее значение переменной, и только после этого её значение увеличивается или уменьшается на 1. Отметим, что когда инкремент или декремент переменной используются в виде отдельного оператора (++к или к++), то префиксная и постфиксная формы приводят к одинаковому результату.

Рассмотрим два примера, в них после выполнения арифметических действий переменные будет иметь разные значения.

В первом примере, исходя из приоритетов операций, переменная а увеличится на 1и а=7 , потом из переменной авычитается 1, таким образом, в=6. Во втором примере вначале выполнится операция вычитание и в=5, потом а увеличится на 1 и составит а=7.

Префиксные операции имеют самый высокий приоритет, ++i, затем —i, а постфиксная операция имеет самый низкий приоритет.

Операции инкремента и декремента работают только с целыми переменными. Нельзя инкрементировать и декрементировать выражения. Эти операции применяются только к переменным.

«Операция запятая.»

Операция запятая – это разделитель последовательности, позволяющий использовать в одной строке несколько выражений, разделённых запятыми. Например, можно записать следующее выражение: J=(I=12, I+8); В результате выполнения этого оператора J=20.


| следующая лекция ==>
Условная операция | Операция sizeof

Дата добавления: 2014-01-07 ; Просмотров: 213 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Постфиксные операторы увеличения и уменьшения ++ и — Postfix Increment and Decrement Operators: ++ and —

Синтаксис Syntax

Примечания Remarks

В C++ доступны префиксные и постфиксные операции инкремента и декремента. В этом разделе описываются только их постфиксные формы. C++ provides prefix and postfix increment and decrement operators; this section describes only the postfix increment and decrement operators. (Дополнительные сведения см. в разделе операторы префикса увеличения и уменьшения.) Различие между ними — что в постфиксной записи оператор находится после Постфиксное выражение, тогда как в префиксной записи он располагается перед выражение. (For more information, see Prefix Increment and Decrement Operators.) The difference between the two is that in the postfix notation, the operator appears after postfix-expression, whereas in the prefix notation, the operator appears before expression. В следующем примере представлен постфиксный оператор инкремента: The following example shows a postfix-increment operator:

В результате применения постфиксного оператора инкремента (++) — что значение операнда увеличивается на одну единицу соответствующего типа. The effect of applying the postfix increment operator (++) is that the operand’s value is increased by one unit of the appropriate type. Аналогичным образом, в результате применения постфиксного оператора декремента () — что значение операнда уменьшается на одну единицу соответствующего типа. Similarly, the effect of applying the postfix decrement operator () is that the operand’s value is decreased by one unit of the appropriate type.

Важно отметить, что в постфиксной операции инкремента или декремента выражение значение выражения до применения соответствующего оператора. It is important to note that a postfix increment or decrement expression evaluates to the value of the expression prior to application of the respective operator. Операция инкремента или декремента выполняется после операнд вычисляется. The increment or decrement operation occurs after the operand is evaluated. Эта особенность возникает, только когда постфиксная операция инкремента или декремента выполняется в контексте выражения. This issue arises only when the postfix increment or decrement operation occurs in the context of a larger expression.

Если же постфиксный оператор применяется к аргументу функции, то инкремент или декремент значения аргумента необязательно будет выполнен до его передачи в функцию. When a postfix operator is applied to a function argument, the value of the argument is not guaranteed to be incremented or decremented before it is passed to the function. Дополнительные сведения см. в разделе 1.9.17 стандарта C++. See section 1.9.17 in the C++ standard for more information.

Применения постфиксного оператора инкремента к указателю на массив объектов типа long фактически добавляет четыре внутреннего представления указателя. Applying the postfix increment operator to a pointer to an array of objects of type long actually adds four to the internal representation of the pointer. В результате этого указатель, который раньше относился n-й элемент массива, для ссылки на (n+ 1) элемент th. This behavior causes the pointer, which previously referred to the nth element of the array, to refer to the (n+1)th element.

Операнды для постфиксных инкремента и Постфиксные операторы декремента должны иметь изменяемые (не const) l значения арифметического или указательного типа. The operands to postfix increment and postfix decrement operators must be modifiable (not const) l-values of arithmetic or pointer type. Тип результата совпадает со значением, Постфиксное выражение, но больше не является l значением. The type of the result is the same as that of the postfix-expression, but it is no longer an l-value.

Visual Studio 2020 версии 15.3 и более поздние версии (состав /std: c ++ 17): Операнд постфиксного оператора инкремента или декремента не может быть типа bool. Visual Studio 2020 version 15.3 and later (available with /std:c++17): The operand of a postfix increment or decrement operator may not be of type bool.

Ниже показан пример постфиксного оператора инкремента. The following code illustrates the postfix increment operator:

Постфиксные операции инкремента или декремента для типов перечисления не поддерживаются: Postincrement and postdecrement operations on enumerated types are not supported:

Операторы инкремента и декремента

Ключевой момент: оператор инкремента (увеличения) (++) и оператор декремента (уменьшения) (—) предназначены для увеличения и уменьшения переменной на 1.

Два сокращённых оператора ++ и используются для прибавления или вычитания единицы. Это удобно, потому что часто во многих задачах программирования необходимо изменить значение именно не единицу. Например, следующий код увеличивает i на 1 и уменьшает j на 1.

i++ произносится как i плюс плюс, а i— как i минус минус. Эти операторы известны как постфиксный инкремент (или постинкремент) и постфиксный декремент (или постдекремент), поскольку операторы ++ и размещаются после переменной. Эти операторы также могут быть размещены перед переменной, например:

++i увеличивает i на 1, а —j уменьшает j на 1. Эти операторы известны как префиксный инкремент (или преинкремент) и префиксный декремент (или предекремент).

Как вы можете видеть, в предыдущих примерах эффект i++ и ++i или i— и —i одинаковый. Тем не менее, их эффекты различны, когда они используются в инструкциях, делающих что-то большее чем простое увеличение или уменьшение на единицу. Следующая таблица описывает их различия и даёт примеры:

Оператор Имя Описание Пример (подразумевается, что i = 1)
++var преинкремент Увеличивает var на 1 и использует новое значение var в инструкции int j = ++i;
// j равно 2, i равно 2
var++ постинкремент Увеличивает var на 1 и использует изначальное значение var в инструкции int j = i++;
// j равно 1, i равно 2
—var предекремент Уменьшает var на 1 и использует новое значение var в инструкции int j = —i;
// j равно 0, i равно 0
var— постдекремент Уменьшает var на 1 и использует изначальное значение var в инструкции int j = i—;
// j равно 1, i равно 0

Дополнительные примеры для иллюстрации различий между префиксной формой ++ (или ) и постфиксной формой ++ (или ). Рассмотрим следующий код:

Он даёт точно такой же эффект как и код:

Т.е. i в итоге равняется 11, а newNum равняется 100.

В этом случае i увеличивается на 1, затем старое значение i используется для умножения. Поэтому newNum становится 100. Если i++ заменить на ++i следующим образом:


То этот код будет эквивалентом следующего:

Т.е. теперь в конечном счёте i равно 11, а newNum равно 110.

i увеличена на 1, и в умножении используется новое значение i. Поэтому значение newNum становится 110.

Вот другие примеры:

После выполнения всех трёх строк, y становится 6.0, z становится 7.0, а x становится 0.0.

Совет: использование операторов инкремента и декремента делает выражения короткими, но также делает их сложными и трудными для чтения. Избегайте использование этих операторов в выражениях, которые изменяют несколько переменных или одну и ту же переменную несколько раз, примерно так: int k = ++i + i.

Проверь себя:

  1. Какие из этих утверждений верны?

a. Любое выражение может использоваться как инструкция языка.

b. Выражение x++ может использоваться как инструкция.

c. Инструкция x = x + 5 также является выражением.

d. Инструкция x = y = x = 0 неправильна.

  1. Покажите вывод следующего кода:

4.5. Операции инкремента и декремента

4.5. Операции инкремента и декремента

Операции инкремента (++) и декремента (—) дают возможность компактной и удобной записи для изменения значения переменной на единицу. Чаще всего они используются при работе с массивами и коллекциями – для изменения величины индекса, указателя или итератора:

vectorint ivec( 10 );

int ix_vec = 0, ix_ia = 9;

while ( ix_vec 10 )

ivec[ ix_vec++ ] = ia[ ix_ia— ];

vectorint::iterator iter = ivec.begin();

while ( iter != ivec.end() )


assert( *iter++ == *pia— );

является постфиксной формой оператора инкремента. Значение переменной ix_vec увеличивается после того, как ее текущее значение употреблено в качестве индекса. Например, на первой итерации цикла значение ix_vec равно 0. Именно это значение применяется как индекс массива ivec, после чего ix_vec увеличивается и становится равным 1, однако новое значение используется только на следующей итерации. Постфиксная форма операции декремента работает точно так же: текущее значение ix_ia берется в качестве индекса для ia, затем ix_ia уменьшается на 1.

Существует и префиксная форма этих операторов. При использовании такой формы текущее значение сначала уменьшается или увеличивается, а затем используется новое значение. Если мы пишем:

// неверно: ошибки с границами индексов в

int ix_vec = 0, ix_ia = 9;

while ( ix_vec 10 )

ivec[ ++ix_vec ] = ia[ —ix_ia ];

значение ix_vec увеличивается на единицу и становится равным 1 до первого использования в качестве индекса. Аналогично ix_ia получает значение 8 при первом использовании. Для того чтобы наша программа работала правильно, мы должны скорректировать начальные значения переменных ix_ivec и ix_ia:

int ix_vec = -1, ix_ia = 8;

while ( ix_vec 10 )

ivec[ ++ix_vec ] = ia[ —ix_ia ];

В качестве последнего примера рассмотрим понятие стека. Это фундаментальная абстракция компьютерного мира, позволяющая помещать и извлекать элементы в последовательности LIFO (last in, fist out – последним вошел, первым вышел). Стек реализует две основные операции – поместить (push) и извлечь (pop).

Текущий свободный элемент называют вершиной стека. Операция push присваивает этому элементу новое значение , после чего вершина смещается вверх (становится на 1 больше). Пусть наш стек использует для хранения элементов вектор. Какую из форм операции увеличения следует применить? Сначала мы используем текущее значение, потом увеличиваем его. Это постфиксная форма:

stack[ top++ ] = value;

Что делает операция pop? Уменьшает значение вершины (текущая вершина показывает на пустой элемент), затем извлекает значение. Это префиксная форма операции уменьшения:

int value = stack[ —top ];

(Реализация класса stack приведена в конце этой главы. Стандартный класс stack рассматривается в разделе 6.16.)

Как вы думаете, почему язык программирования получил название С++, а не ++С?

Сокращенное присваивание, инкремент и декремент

Чтобы облегчить себе жизнь и количество символов в коде, в C++ можно прибегать к некоторым хитростям.

Сокращенное присваивание

Помните, в прошлом уроке мы писали i = i + 1 . Но зачем нам повторять переменную i еще раз? Ведь мы можем сделать запись короче – i += 1 . Не бойтесь это тоже самое, только мы упрощаем нашу запись. На самом деле мы это можем сделать с любой математической операцией, которые уже знаем:

  1. Сложение – (a + 1) == (a += 1);
  2. Вычитание – (a – 1) == (a -= 1);
  3. Умножение – (a * 2) == (a *= 2);
  4. Деление – (a / 2) == (a /= 2);
  5. Деление с остатком – (a % 2) == (a %= 2);

Про побитовые операции мы сейчас говорить не будем, сделаем это позже.

Дело не только в том, чтобы написать меньше кода. А еще чтобы сделать его более наглядным. При беглом просматривании кода мы не всегда сможем понять что написано. Например, i = j + 1 или j = i + 1. А когда мы увидим i += 1. Мы точно не ошибемся.


Инкремент и декремент

Эти операции очень частые. В циклах они используются поголовно. Именно поэтому и пришло время изучить их.

Синтаксис этих двух операций очень простой i++ / ++i и i– / –i.

Что делают эти операции?

  1. i++ и ++i – прибавляют единицу к переменной i;
  2. i– и –i – вычитают единицу из переменной i.

В чем разница между a++ и ++a?

Разница появляется в случае использования в выражениях.

  1. ++i – сначала увеличивает значение переменной i, затем использует ее значение в выражении;
  2. i++ – сначала использует значение переменной i в выражении, а затем увеличивает его на 1.

Но лучше всего это сделать на примере.

Посмотрите на изображение, оно наглядно показывает, что мы получаем в том или ином случае.

  1. В первом случае, мы вначале увеличиваем i на единицу, а лишь затем выводим ответ;
  2. Во втором случае, мы вначале выводим значение переменно i, и только затем увеличиваем ее на единицу.

Важно: Необходимо помнить, что операции инкремента и декремента можно использовать только к переменным. Так как значение должно быть изменяемым. К цифрам нельзя! Потому что цифры это не изменяемое значение, и не ячейка памяти. И их нельзя увеличить или уменьшить таким способом.

Приоритет операций

  1. i++ и i–;
  2. ++i и –i;
  3. – (унарный минус (отрицательное число));
  4. * и / и %;
  5. + и -;
  6. >;
  7. и >=;

  8. == и !=;
  9. &&;
  10. ||;
  11. ? и : (тернарная операция);
  12. =;
  13. += и -=;
  14. *= и /= и %=;

Чем меньше цифра, тем больший приоритет имеет операция.

Решение задач

Звездопад

Выведите в строку n звездочек, где n – количество людей, смотрящих на звездопад.
Формат входных данных
Вводится целое число n (1 15 целых чисел, каждое из которых не превосходит по модулю 2 15 −1. После последнего числа вводится 0. Гарантируется, что в последовательности есть хотя бы одно число.
Формат выходных данных
Требуется вывести одно число — сумму всех чисел этой последовательности.
Примеры
входные данные
1 1 1 1 1 0
выходные данные
5

Инкремент и декремент в С++

В предыдущей статье мы с вами рассмотрели бинарные операторы, которые используют для арифметических операций с двумя операндами (переменными). А в этом уроке мы научимся применять унарные операторы, для которых необходим один операнд. Называются они инкремент ( ++ ) и декремент ( ). Роль этих операторов в том, чтобы изменить (увеличить или уменьшить соответственно) значение переменной на единицу, при этом значение будет перезаписано. Рассмотрим пример, в котором будем изменять значение переменной variable на единицу тремя различными способами:

После каждой операции в строках 11, 13 и 15. к значению переменной variable прибавляется единица. Как вы видите, самая короткая запись – это запись с использованием инкремента. Ниже, в строках 17 – 19, мы трижды применили декремент и в итоге получим значение variable уменьшенное на 3.

Оба этих унарных оператора могут иметь две формы: постфиксную ( когда оператор расположен сразу за переменной) и префиксную (оператор расположен перед переменной). В рассмотренном примере мы применяли постфиксные формы инкремента и декремента. Чем же отличаются эти формы друг от друга? И первая и вторая формы этих операторов выполняют одинаковые роли – увеличение или уменьшение переменной на единицу. Но если в строке кода, где применяются инкремент или декремент, присутствуют еще какое-либо команды, тогда эти операторы по-разному себя ведут. Постфиксная форма будет применена после выполнения других команд. Посмотрим на следующем примере:

Операции инкремента/декремента

Мы уже рассматривали операции присваивания в форме х=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

Инкремент и декремент

Операции ++ и — выполняют инкремент и декремент. Операция инкремента увеличивает значение операнда на единицу, а операция

декремента уменьшает значение операнда на единицу. Например, выражение

с операцией инкремента можно переписать так:

Аналогично следующее выражение:

равнозначно приведенному ниже выражению

Эти операции могут быть записаны в постфиксной форме, когда операция следует за операндом, а также в префиксной форме, когда операция предшествует операнду.

Рассмотрим разницу в использовании префиксного и постфиксного инкремента Java на следующем примере. Разница будет только тогда, когда инкремент используется в другой операции.

Например, при выполнении строки int b = a++; сначала значение из переменной а будет записано в переменную b и только потом произойдет инкремент (постфиксная форма означает после). Поэтому переменной b будет присвоено значение 1. Смотрим на следующую строку — int c = ++a; — в этом случае сначала выполнится инкремент (префиксная форма означает до), а уже потом новое значение из a будет записано в переменную с .

Когда инкремент не участвует в другой операции, например как в строке c++ , не имеет значения напишите вы префиксную или постфиксную форму.

Результат выполнения программы:

Над переменной типа char тоже можно производить операцию инкремента. При этом инкремент производится над кодом символа. Символы в таблице Unicode размещены по алфавиту, поэтому при выполнении операции инкремента над символьным значением, мы получаем следующий по алфавиту символ:

Илон Маск рекомендует:  Dos fn 49h освободить распределенный блок памяти
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL