Главная arrow Язык программирования C# arrow C# Полное руководство Герберт Шилдт arrow Операторы инкремента и декремента C# Полное руководство Герберт Шилдт

Операторы инкремента и декремента C# Полное руководство Герберт Шилдт

Операторы инкремента (++) и декремента (—) были представлены в главе 2. Как станет ясно в дальнейшем, они обладают рядом особых и интересных свойств. Но сначала вьТясним основное назначение этих операторов.
Оператор инкремента увеличивает свой операнд на 1, а оператор декремента уменьшает операнд на 1. Следовательно, оператор
х++;
равнозначен оператору
х = x + 1;
а оператор
х --;
равносилен оператору х = х - 1;
Следует, однако, иметь в виду, что в инкрементной или декрементной форме значение переменной х вычисляется только один, а не два раза. В некоторых случаях это позволяет повысить эффективность выполнения программы.
Оба оператора инкремента и декремента можно указывать до операнда (в префиксной форме) или же после операнда (в постфиксной форме). Например, оператор
х = х + 1;
может быть записан в следующем виде:
++х; // префиксная форма
или же в таком виде:
х++; // постфиксная форма
В приведенном выше примере форма инкремента (префиксная или постфиксная) особого значения не имеет. Но если оператор инкремента или декремента используется в длинном выражении, то отличие в форме его записи уже имеет значение. Когда оператор инкремента или декремента предшествует своему операнду, то результатом операции становится значение операнда после инкремента или декремента. А когда оператор инкремента или декремента следует после своего операнда, то результатом операции становится значение операнда до инкремента или декремента. Рассмотрим следующий фрагмент кода:
х = 10;
у = ++х;
В данном случае значение переменной у будет установлено равным 11, поскольку значение переменной х сначала увеличивается на 1, а затем присваивается переменной у. Но во фрагменте кода
х = 10;
у = х++;
значение переменной у будет установлено равным 10, так как в этом случае значение переменной х сначала присваивается переменной у, а затем увеличивается на 1. В обоих случаях значение переменной х оказывается равным 11. Отличие состоит лишь том, когда именно это значение станет равным И: до или после его присваивания переменной у.
Возможность управлять моментом инкремента или декремента дает немало преимуществ при программировании. Обратимся к следующему примеру программы, в которой формируется последовательный ряд чисел:

// Продемонстрировать отличие между префиксной // и постфиксной формами оператора инкремента (++).
using System;
class PrePostDemo { static void Main() {
int x, y; int i;
х = 1;
Console.WriteLine ("Ряд чисел, полученных 11 + "с помощью оператора у = х + х++;") ;
for (i = 0; i < 10; i++) {
у = x + x++; // постфиксная форма оператора ++
Console .WriteLine (у + " " );
}
Console.WriteLine() ; x = 1;
Console .WriteLine ("Ряд чисел, полученных 11 +
"с помощью оператора у = х + ++х;") ; for (i = 0; i < 10; i++) {
у = x + ++x; // префиксная форма оператора ++
Console .WriteLine (у + 11 11 );
}
Console.WriteLine() ;
}
}

Выполнение этой программы дает следующий результат:
Ряд чисел, полученных с помощью оператора у = х + х++
2468
10
12
14
16
18
20
Ряд чисел, полученных с помощью оператора у = х + ++х;
3579
11
13
15
17
19
21
Как подтверждает приведенный выше результат, в операторе у = х + х++;
первоначальное значение переменной х складывается с самим собой, а полученный результат присваивается переменной у. После этого значение переменной х увеличивается на 1. Но в операторе
у = х + ++х;
значение переменной х сначала увеличивается на 1, затем складывается с первоначальным значением этой же переменной, а полученный результат присваивается переменной у. Как следует из приведенного выше результата, простая замена префиксной формы записи оператора ++х постфиксной формой х++ приводит к изменению последовательного ряда четных чисел на нечетные.
И еще одно замечание по поводу приведенного выше примера: не пугайтесь выражений, подобных следующему:
x + ++ x
Такое взаимное расположение двух операторов, воздействующих на одну и ту же переменную, может показаться не совсем привычным, но компилятор воспримет их в правильной последовательности. Нужно лишь запомнить, что в данном выражении значение переменной х складывается с ее увеличенным на 1 значением.