Арифметические операции

Язык 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).

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

Смотрите также: