Оператори у C#

Оператори дозволяють обробляти прості типи даних і об'єкти. Вони отримують в якості вхідного один або більше операндів і повертають деяке значення як результат.
Кожна мова програмування використовує оператори, через яких ми можемо виконувати різні дії над даними. Розглянемо оператори в C# і спробуємо розібратися для чого вони потрібні і як вони використовуються.

Що таке оператор?

Після того, як ми дізналися, як оголошувати і встановлювати змінні ми розповімо про те, як виконувати різні операції з ними. Для цієї мети ми будемо знайомитися з операторами.
Оператори дозволяють обробляти прості типи даних і об'єкти. Вони отримують в якості вхідного один або більше операндів і повертають деяке значення як результат.
Оператори в C# є спеціальними символами (такі як "+", ".", "^", і т. д.) і вони виконують перетворення над одним, двома або трьома операндами. Прикладами операторів C# є математичні знаки додавання, віднімання, множення і ділення (+, -, *, /) і відповідні операції, які вони виконують на цілими і дійсними числами. 

Оператори в C#

 
Оператори в C# можна поділити на декілька різних категорій: 
  • Арифметичні оператори – так як і в математиці, служать для виконання простих арифметичних операцій.
  • Оператори присвоювання – дозволяють присвоювання значень змінних.
  • Оператори порівняння – дають можливість порівняти два літерала та/або змінних.
  • Логічні оператори – оператори для роботи з логічними типами даних та логічними виразами.
  • Побітові (бітові) оператори використовуються для виконання операцій на двійковим представлення числових даних.
  • Оператори перетворення типів – дозволяють перетворення даних з одного типу в інший.

Категорії операторів

Далі подано список операторів за категоріями:

Категорії

Оператори

Арифметичні

-, +, *, /, %

Інкремент (декремент)

++, --

Логічні

&&, ||, !, ^

Бітові

&, |, ^, ~, <<, >>

Порівняння

==,!=, >, <, >=, <=

Присвоєння

=, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

Об’єднання рядків

+ (конкатенація)

Перетворення типів

(type), as, is, typeof, sizeof

Індексні, лямбда-числення, інші

[],=>,., new, (), [], ?:, ??

Класифікація операторів за числу аргументів

Оператори також поділяються за числом аргументів

Тип оператора исло аргументів)

Приклади

Первинні (постфіксні)

Math.Abs(x)-виклик методу

Унарний, один

-x, y++, !x

Бінарний, два

x+y, x>y, x&&y

Тернарний, три

(a>b) ? c : d

 

Усі бінарні оператори в C# є лівоасоціативним, тобто вирази обчислюються зліва направо, за винятком операторів присвоювання. Всі оператори присвоювання та умовні оператори ?: і ?? є правоасоціативними, тобто вирази обчислюються справа наліво. Унарні оператори не є асоціативними.

В залежності від типів даних, над якими виконується дія, знаки операторів мають різний сенс. Класичним прикладом у цьому випадку є оператори + та /.

Приклад

double result = (2+3)/2;
string greetings = "Hello ";
string company = "Microsoft!";
Console.WriteLine("{0} {1}", result, greetings + company );

У цьому прикладі знак + виконує додавання для чисел і конкатенацію для рядків, а знак / виконує цілочисельне ділення і результат буде 2, а не 2.5.

Приорітет операцій у C#

Деякі оператори мають перевагу (пріоритет) над іншими. Наприклад, в математиці множення має пріоритет над додаванням. Оператори з вищим пріоритетом обчислюються раніше тих, що мають нижчий пріоритет. Оператор ()  використовується, щоб змінити пріоритет, і, як в математиці, його вміст обчислюється в першу чергу.

У наступній таблиці подано пріоритети операцій від найвищого до найнижчого:

Категорія

Оператори

Первинні

x.y  f(x)  a[x]  x++  x--  new typeof  checked  unchecked

Унарні

+  -  !  ~  ++x  --x  (T)x

Мультиплікативні

*  /  %

Аддитивні

+  -

Зсуву

<<  >>

Відношення і визначення типу

<  >  <=  >=  is  as

Рівності

==  !=

Логічне AND

&

Логічне XOR

^

Логічне OR

|

Умовне AND

&&

Умовне OR

||

Умовне

?:

Присвоєння

=  *=  /=  %=  +=  -=  <<=  >>=  &=  ^=  |=

 

Оператори, розташовані у верхній частині таблиці, мають вищий пріоритет, ніж ті, що подно нижче, і, відповідно, вони мають перевагу в обчисленні виразу. Щоб змінити пріоритет оператора ми можемо використовувати дужки.

Арифметичні оператори.

Арифметичні оператори в C# +, -, * такі ж, як у математиці. Вони виконують додавання, віднімання та множення числових значень і результат також числове значення.

Оператор ділення має різний вплив на цілі і дійсні числа. Коли ми ділимо ціле на ціле число (наприклад, int, long і sbyte) результуюче значення є також цілим числом (без округлення дробової частини). Нагадаємо, що таке ділення називається цілочисельним. Приклад цілочисельного ділення: 7 / 3 = 2.

Цілочисельне ділення на 0 не допускається і призводить до виникнення виняткової ситуації п��д час виконання програми (runtime exception) DivideByZeroException. Остачу від ділення цілих чисел можна отримати оператором %.

Наприклад, 7 % 3 = 1, і -10 % 2 = 0.

 

При діленні двох дійсних чисел або двох чисел, одне з яких є дійсним (наприклад, float, double, і т. д.), результат буде дійсним числом з цілою і дробовою частиною. Наприклад: 5.0 / 2 = 2.5. У діапазоні дійсних чисел допускається ділення на 0.0 і відповідно результат +∞ (нескінченність), -∞ (нескінченності) або NaN (неприпустиме значення, Not a Number).

Оператор інкременту ++ додає одиницю до значення змінної, відповідно оператор декременту -- віднімає одиницю значення. Для даних операторів існує префіксна і постфіксна (суфіксна) форма.

Коли ми використовуємо оператори ++ і – як префікс, то спочатку обчислюється нове значення, а потім повертається результат. При постфіксній(суфіксній) формі спочатку повертається початкове значення операнда, а потім виконуєтся дія додавання або віднімання.

Приклад.

namespace ConsoleProgram
{
   class Program
   {
       static void Main(string[] args)
       {
           double totalCost = 120;
           int quantityOfBooks = 50;
           double averageBookPrice = totalCost / quantityOfBooks;
           double halfOfTotalCost = 1/2 * totalCost;

           Console.WriteLine(averageBookPrice); // 2.5
           Console.WriteLine(halfOfTotalCost); // 0

           halfOfTotalCost = totalCost * 1 / 2 ;

           Console.WriteLine(halfOfTotalCost); // 60

           int numberA = 12;
           int numberB = 5;

           Console.WriteLine(numberA + numberB);     // 17
           Console.WriteLine(numberA + (numberB++)); // 17
           Console.WriteLine(numberA + numberB);     // 18
           Console.WriteLine(numberA + (++numberB)); // 19
           Console.WriteLine(numberA + numberB);     // 19
           Console.WriteLine(24 / numberA);     // 2
           Console.WriteLine(24 % numberB);     // 4

           numberA = 1;
           numberB = 0;
           // Console.WriteLine(one / zero); // DivideByZeroException

           double zero = 0.0;
           Console.WriteLine("{0} / {1} = {2}", zero, zero, zero / zero);
 
           double dZero = 0.0;
           Console.WriteLine(-1.0 / zero); // -Infinity
           Console.WriteLine(1.0 / dZero); // Infinity
       }
}

 

 

Add comment

Loading