Инкремент – это операция в языках программирования, которая увеличивает переменную на единицу, если переменная числовая и возвращает следующий символ из таблицы символов, если переменная символьного типа. При этом переменная не должна принадлежать типу данных const (т.е. константе).
Операторы инкремента записывается как два плюса: ++
Существуют два вида инкрементов: преинкремент (или префиксный инкремент) и постинкремент (или постфиксный инкремент).
В синтаксисе префиксный инкремент ставится перед необходимой переменной, а постфиксный, соответственно, после.
Главное различие между ними, что при использовании операции преинкремента значение переменной сначала увеличивается на 1, а затем используется в выражении, к которому относится данная переменная. А при использовании операции постинкремента значение переменной сначала используется в выражении, а потом увеличивается на 1.
Более подробно и с примерами про это будет рассказано ниже.
Декремент – это подобная инкременту операция, с той лишь разницей, что она уменьшает числовую переменную на единицу, а для символьной переменной выбирает предшествующий ей символ из таблицы символов. Декремент также не работает с константным типом данных и также имеет два вида: предекремент (префиксный декремент) и постдекремент (постфиксный декремент).
Эти виды декрементов работают абсолютно так же, как и инкременты с той лишь разницей, что происходит уменьшение значения на единицу. Префиксный декремент уменьшает переменную до её использования в других выражениях, а постфиксный декремент, наоборот, уменьшает переменную только после того, как она будет использована в выражении.
Декремент записывается как два минуса: — — . В коде предекремент ставится перед переменной, а постдекремент – после.
Обе эти операции были созданы для удобства пользователей – для сокращения количества кода и для уменьшения времени его написания:
1 2 3 |
x = x + 1; // обычная запись увеличения переменной на единицу x++; // инкремент |
Ниже мы приведём примеры префиксных и постфиксных инкрементов и декрементов, для того, чтобы было легче понять разницу между ними. Также мы приведём синтаксис инкрементов и декрементов в языках C#, C, Java и C++.
Инкремент и декремент в C#
Создадим пример, где покажем различие между префиксными и постфиксными инкрементами.
1 2 3 4 5 6 7 8 9 10 11 |
using System; public class Program { public static void Main() { int x = 10; Console.WriteLine(x++); Console.WriteLine(x * 2); Console.ReadLine(); } } |
В этом примере мы создали переменную x, равную 10. Затем мы выводим постинкремент этого x на консоль, а также выводим выражение, где x умножается на 2. Запустим программу и посмотрим на результат:
Итак, сначала нам вывелся исходный x без прибавления к нему единицы. Почему так? Мы уже говорили, что при постинкременте значение переменной сначала будет использоваться в выражении, где необходима эта переменная, а только потом увеличится на 1. Данным «выражением» стал как раз метод Console.WriteLine, который вывел нашу переменную. После этого инкремент сработал, x увеличился на единицу, а затем сработал второй метод вывода, где x увеличивался в два раза. Именно поэтому во второй строке у нас получилось 22.
Теперь давайте поменяем инкремент на префиксный и посмотрим, что изменится.
1 2 3 4 5 6 7 8 9 10 11 |
using System; public class Program { public static void Main() { int x = 10; Console.WriteLine(++x); Console.WriteLine(x * 2); Console.ReadLine(); } } |
Результат такой:
Как уже можно понять, значение переменной x сразу же увеличилось на 1, поэтому при выводе в первой строке у нас получилось 11, а не 10. Вторая строка не изменилась, так как в любом случае мы умножаем 11 на 2.
С декрементами всё обстоит точно так же:
Скачать исходник описанных выше кодов вы сможете по следующей ссылке:
Скачать исходник
Ниже мы приведём листинги тех же примеров на других языках программирования. Соответственно, результаты будут такие же, как и в описанных выше программах.
Инкремент и декремент в C
Постинкремент в С
1 2 3 4 5 6 7 8 9 10 11 |
#include <stdio.h> int main() { int x = 10; printf("%i\n", x++); printf("%i", x * 2); return 0; } |
Преинкремент в С
1 2 3 4 5 6 7 8 9 10 11 |
#include <stdio.h> int main() { int x = 10; printf("%i\n", ++x); printf("%i", x * 2); return 0; } |
Постдекремент в С
1 2 3 4 5 6 7 8 9 10 11 |
#include <stdio.h> int main() { int x = 10; printf("%i\n", x--); printf("%i", x * 2); return 0; } |
Предекремент в С
1 2 3 4 5 6 7 8 9 10 11 |
#include <stdio.h> int main() { int x = 10; printf("%i\n", --x); printf("%i", x * 2); return 0; } |
Инкремент и декремент в Java
Постинкремент в Java
1 2 3 4 5 6 7 8 |
public class Prog { public static void main(String []args){ int x = 10; System.out.println(x++); System.out.println(x * 2); } } |
Преинкремент в Java
1 2 3 4 5 6 7 8 |
public class Prog { public static void main(String []args){ int x = 10; System.out.println(++x); System.out.println(x * 2); } } |
Постдекремент в Java
1 2 3 4 5 6 7 8 |
public class Prog { public static void main(String []args){ int x = 10; System.out.println(x--); System.out.println(x * 2); } } |
Предекремент в Java
1 2 3 4 5 6 7 8 |
public class Prog { public static void main(String []args){ int x = 10; System.out.println(--x); System.out.println(x * 2); } } |
Инкремент и декремент в С++
Постинкремент в С++
1 2 3 4 5 6 7 8 |
#include <iostream> using namespace std; int main() { int x=10; cout << x++ << '\n'; cout << x * 2; return 0; } |
Преинкремент в С++
1 2 3 4 5 6 7 8 |
#include <iostream> using namespace std; int main() { int x=10; cout << ++x << '\n'; cout << x * 2; return 0; } |
Постдекремент в С++
1 2 3 4 5 6 7 8 |
#include <iostream> using namespace std; int main() { int x=10; cout << x-- << '\n'; cout << x * 2; return 0; } |
Предекремент в С++
1 2 3 4 5 6 7 8 |
#include <iostream> using namespace std; int main() { int x=10; cout << --x << '\n'; cout << x * 2; return 0; } |
Спасибо за прочтение!
Поделиться в соц. сетях: