C # Приоритет и ассоциативность операторов: определение и примеры

В этом руководстве вы узнаете о приоритете и ассоциативности операторов в C #. Это даст нам представление о том, как выражение оценивается компилятором C #.

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

Приоритет оператора - это набор правил, который определяет, как оценивается выражение. В C # каждому оператору C # назначен приоритет, и на основе этих приоритетов вычисляется выражение.

Например , приоритет (*)оператора умножения выше, чем приоритет (+)оператора сложения . Поэтому операция умножения выполняется перед сложением.

Взгляните на заявление ниже.

 интервал х = 4 + 3 * 5;

Каким будет значение x после выполнения этого оператора?

Операнд 3связан с +и *. Как было сказано ранее, умножение имеет более высокий приоритет, чем сложение. Итак, операция 3 * 5проводится вместо 4 + 3. Значение переменной x будет 19.

Если бы сложение имело более высокий приоритет, 4 + 3сначала оценивалось бы, и значение x было бы 35.

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

Чем выше приоритет оператора, тем выше он отображается в таблице

Приоритет операторов C #
Категория Операторы
Постфиксное увеличение и уменьшение ++, -
Приращение префикса, декремент и унарный ++, -, +, -,!, ~
Мультипликативный *, /,%
Добавка +, -
сдвиг <>
Реляционный <,,> =
Равенство ==,! =
Побитовое И &
Побитовое исключающее ИЛИ ^
Побитовое ИЛИ |
Логическое И &&
Логическое ИЛИ ||
Троичный ? :
Присвоение =, + =, - =, * =, / =,% =, & =, | =, =, <> =

Операторы присваивания имеют самый низкий приоритет, тогда как постфиксные операторы увеличения и уменьшения имеют самый высокий приоритет.

Пример 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 Ложь

Давайте разберемся, как вычисляется выражение в программе.

Приоритет --и ++выше *, а приоритет *выше, чем -. Следовательно, утверждение,

 результат1 = --a * b - ++ c;

эквивалентно

 результат1 = ((--a) * b) - (++ c);

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

  • Сначала вычисляется (--a), в результате чего получается 4.
  • Затем вычисляется (++ c), в результате чего получается 5.
  • Теперь вычисляется (a * b), в результате чего получается 24.
  • Наконец, выполняется вычитание, в результате чего получается 19.
  • Следовательно, окончательное значение result1 будет 19.

В следующем выражении приоритет +выше, чем >=. Итак, сначала добавляются c и a, и полученная сумма сравнивается с b false.

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

В предыдущем разделе мы обсуждали приоритет операторов. Если используются два оператора с разным приоритетом, сначала оценивается оператор с более высоким приоритетом.

Но что, если оба оператора имеют одинаковый приоритет?

В таком случае выражение оценивается на основе ассоциативности оператора (слева направо или справа налево).

Например:

int a = 5, b = 6, c = 3; int result = a * b / c;

Здесь оба *и /имеют одинаковый приоритет. Но поскольку ассоциативность этих операторов слева направо , a * bсначала оценивается, а затем выполняется деление. Конечным результатом этого выражения будет 10.

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

Давайте посмотрим на другой пример.

int a = 5, b = 6, c = 3; а = б = с;

Ассоциативность =оператора справа налево . Таким образом, значение c (т.е. 3) присваивается b, а затем значение b присваивается a. Таким образом, после выполнения этого оператора значения a, b и c будут 3.

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

C # Ассоциативность операторов
Категория Операторы Ассоциативность
Постфиксное увеличение и уменьшение ++, - Слева направо
Приращение префикса, декремент и унарный ++, -, +, -,!, ~ Справа налево
Мультипликативный *, /,% Слева направо
Добавка +, - Слева направо
сдвиг <> Слева направо
Реляционный <,,> = Слева направо
Равенство ==,! = Слева направо
Побитовое И & Слева направо
Побитовое исключающее ИЛИ ^ Слева направо
Побитовое ИЛИ | Слева направо
Логическое И && Слева направо
Логическое ИЛИ || Слева направо
Троичный ? : Справа налево
Присвоение =, + =, - =, * =, / =,% =, & =, | =, =, <> = Справа налево

Практически все операторы имеют ассоциативность слева направо. Операторы, обладающие ассоциативностью справа налево:

  • Унарные операторы
  • Операторы увеличения и уменьшения префикса
  • Тернарный оператор
  • Операторы присваивания

Пример 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 а = 3, б = 3, с = 3

Интересные статьи...