C # Пріоритет та асоціативність операторів: визначення та приклади

У цьому підручнику ми дізнаємось про перевагу операторів та асоціативність у C #. Це дасть нам уявлення про те, як оцінюється вираз компілятором C #.

Перевага оператора C #

Пріоритет оператора - це набір правил, який визначає, як оцінюється вираз. У C # кожному оператору C # присвоєно пріоритет, і на основі цих пріоритетів вираз обчислюється.

Наприклад , пріоритет (*)оператора множення вищий, ніж пріоритет (+)оператора додавання . Тому операція, що передбачає множення, проводиться перед додаванням.

Погляньте на твердження нижче.

 int x = 4 + 3 * 5;

Яким буде значення x після виконання цього твердження?

Операнд 3асоціюється з +і *. Як зазначалося раніше, множення має вищий пріоритет, ніж додавання. Отже, операція 3 * 5проводиться замість 4 + 3. Значення змінної x буде 19.

Якщо складання буде мати більш високий пріоритет, 4 + 3буде оцінюватися першим і значення х буде 35.

Таблиця переваги оператора

Чим вищий пріоритет оператора, тим вищий він відображається в таблиці

Перевага оператора C #
Категорія Оператори
Постфікс збільшення та зменшення ++, -
Префікс Інкремент, Декремент та Унарний ++, -, +, -,!, ~
Мультиплікативний *, /,%
Добавка +, -
Shift <>
Реляційні <,,> =
Рівність ==,! =
Побітове І &
Побітовий XOR ^
Побітове АБО |
Логічне І &&
Логічне АБО ||
Трійковий ? :
Призначення =, + =, - =, * =, / =,% =, & =, | =, =, <> =

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

Приклад 1: Перевага оператора

 using System; namespace Operator ( class OperatorPrecedence ( public static void Main(string() args) ( int result1; int a = 5, b = 6, c = 4; result1 = --a * b - ++c; Console.WriteLine(result1); bool result2; result2 = b>= c + a; Console.WriteLine(result2); ) ) ) 

Коли ми запускаємо програму, результат буде:

 19 Невірно

Давайте розберемося, як оцінюється вираз у програмі.

Пріоритет --і ++вище *, а пріоритет *- вищий ніж -. Звідси твердження,

 result1 = --a * b - ++ c;

еквівалентно

 result1 = ((--a) * b) - (++ c);

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

  • Спочатку (--a) обчислюється в результаті 4.
  • Потім (++ c) обчислюється в результаті 5.
  • Тепер (a * b) обчислюється в результаті 24.
  • Нарешті, віднімання проводиться в результаті в 19.
  • Отже, буде остаточне значення результату1 19.

У наступному виразі пріоритет +вище ніж >=. Отже, c та a додаються спочатку, а сума порівнюється з b, щоб отримати false.

Асоціативність операторів в C #

У попередньому розділі ми обговорювали перевагу оператора. Якщо використовуються два оператори з різним пріоритетом, спочатку оцінюється оператор з вищим пріоритетом.

Але що, якщо обидва оператори мають однаковий пріоритет?

У такому випадку вираз обчислюється на основі асоціативності оператора (зліва направо або справа наліво).

Наприклад:

int a = 5, b = 6, c = 3; int результат = a * b / c;

Тут обидва *і /мають однаковий пріоритет. Але оскільки асоціативність цих операторів знаходиться зліва направо , a * bспочатку оцінюється, а потім проводиться поділ. Кінцевим результатом цього виразу буде 10.

У цьому конкретному прикладі асоціативність насправді не має значення. Тому що навіть якби ділення проводилося до множення, результат не змінився б.

Давайте подивимось на інший приклад.

int a = 5, b = 6, c = 3; a = b = c;

Асоціативність =оператора - справа наліво . Отже, значення c (тобто 3) присвоюється b, а потім значення b присвоюється a. Отже, після виконання цього твердження значення a, b і c будуть 3.

У таблиці нижче показано асоціативність операторів C #:

C # Асоціативність операторів
Категорія Оператори Асоціативність
Постфікс збільшення та зменшення ++, - Зліва направо
Префікс Інкремент, Декремент та Унарний ++, -, +, -,!, ~ Право наліво
Мультиплікативний *, /,% Зліва направо
Добавка +, - Зліва направо
Shift <> Зліва направо
Реляційні <,,> = Зліва направо
Рівність ==,! = Зліва направо
Побітове І & Зліва направо
Побітовий XOR ^ Зліва направо
Побітове АБО | Зліва направо
Логічне І && Зліва направо
Логічне АБО || Зліва направо
Трійковий ? : Право наліво
Призначення =, + =, - =, * =, / =,% =, & =, | =, =, <> = Право наліво

Майже всі оператори мають асоціативність зліва направо. Операторами, що мають асоціативність справа наліво, є:

  • Одинарні оператори
  • Оператори збільшення та префікса префікса
  • Тернарний оператор
  • Оператори присвоєння

Приклад 2: Асоціативність операторів

 using System; namespace Operator ( class OperatorPrecedence ( public static void Main(string() args) ( int a = 5, b = 6, c = 3; int result = a * b / c; Console.WriteLine(result); a = b = c; Console.WriteLine("a = (0), b = (1), c = (2)", a, b, c); ) ) ) 

Коли ми запускаємо програму, результат буде:

 10 a = 3, b = 3, c = 3

Цікаві статті...