Мова 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).
При виконанні складних математичних розрахунків, розбивайте вирази на простіші, та використовуйте дужки, коли пріоритет операцій не очевидний. Це покращить читабельність коду програми, та дозволить уникнути незрозумілих ситуацій.