Язык C# поддерживает множество арифметических операторов, которые позволяют выполнять математические действия над операндами, и возвращают результат в виде числового значения. Операнды – это числовые значения: литералы, константы, переменные, которые принимают участие в операции.
В зависимости от количества операндов, которые принимает оператор, операции делятся на:
- унарные – применяются к одному операнду;
- бинарные – к двум операндам.
Унарные арифметические операторы
Оператор +
Унарный плюс – возвращает то самое значение, которое было ему передано в качестве аргумента.
int number1 = +345; //345
int number2 = +number1; //345
Оператор -
Унарный минус – используется для изменения знака числа.
long x = -123;
long y = -x; //123
Инкремент ++
Инкремент применяется для увеличения числового значения на единицу. В C# существуют два инкремента: префиксный и постфиксный.
Префиксный инкремент увеличивает числовое значение операнда на единицу и возвращает вычисленное значение.
byte a = 5;
byte b = ++a; // b = 6;
Постфиксный инкремент сперва возвращает значение операнда, а после этого увеличивает его значение на единицу.
byte c = 5;
byte d = c++; // d = 5; c = 6;
Декремент --
Декремент используется для уменьшения значения на единицу.
Префиксный декремент уменьшает числовое значение операнда на единицу и возвращает результат.
byte u = 9;
byte v = --u; // v = 8;
Постфиксный декремент сперва возвращает значение, а потом уменьшает его на единицу.
byte y = 7;
byte z = y--; // z = 7; y = 6;
В большей части программ можно встретить постфиксные декремент и инкремент (i--, i++), хотя для их выполнения используется больше ресурсов компьютера. Поэтому, при возможности, используйте префиксные операторы(++i, --i), это дает возможность улучшить производительность выполнения программы.
Бинарные арифметические операции
Оператор сложения +
Бинарный плюс – возвращает сумму значений операндов.
int x = 34 + 5; //39
int y = x + 2 + 1; //42
Оператор вычитания -
Бинарный минус – используется для получения разности двух чисел.
var k = 22 - 10; //12
var g = k - 9; //3
Оператор деления /
Для целых чисел возвращает результат округленный результат деления, остаток от деления отбрасывается.
int f = 32 / 10; //3
int h = f / 2; //1
Для вещественных чисел – результат арифметического деления.
float t = 36F / 10; //3.6
float r = t / 2; //1.8
Если оба операнда являются целыми числами, то результатом выполнения операции деления будет целое число.
double j = 33 / 5; //5
Для решения этой проблемы, необходимо явно указать тип данных, хотя бы одного из значений, с помощью литерального суффикса, или добавив в конец числа “.0”:
double j = 33d / 5; //6.6
double h = 47 / 4.0; //11.75
Остаток от деления %
Оператор для получения остатка от деления двух операндов.
int m = 98 % 9; //8
var n = m % 5; //3
Порядок выполнения арифметических операций
При выполнении нескольких операций в одном выражении, нужно учитывать их приоритет. Наивысший приоритет имеют унарные операции, за ними следуют мультипликативные(умножение, деление и взятие остатка), после них выполняются аддитивные(суммирование и вычитание) операции.
int p = 12 + 9 * 3 - 4 / 2; //37
В данном примере, сперва вычисляется результат умножения, потом деление, а после этого, слева на право суммирование и вычитание.
Для того, чтобы изменить порядок выполнения операций, можно пользоваться скобками.
Ассоциативность операций
Ассоциативность – это свойство операций, которое позволяет определить последовательность их выполнения при равном приоритете.
Существуют два типа ассоциативности:
- левоассоциативные операции – выполняются в порядке слева направо;
- правоассоциативные – справа налево;
Большинство операторов языка C# относятся к первому типу. Во второй входят префиксные инкремент и декремент.
Исходя из этого, выражение b = 45 * 12 - 3 / 4 воспринимается компилятором как b = (45 * 12) - (3 / 4).
При выполнении сложных математических расчетов, разбивайте длинные выражения на несколько простых, используйте скобки, если приоритет выполнения операций не очевиден. Это улучшит читабельность кода программы и позволит избежать непонятных ситуаций.