Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Освоение приоритета и ассоциативности операторов в C#: практическое руководство

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

Это подробное руководство объясняет, как компилятор C# вычисляет выражения, применяя правила приоритета и ассоциативности операторов. Изучите тему на наглядных примерах и справочных таблицах.

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

Приоритет операторов определяет порядок вычисления частей выражения. У каждого оператора C# есть фиксированный уровень приоритета, что обеспечивает согласованную обработку выражений компилятором.

Например, оператор умножения * имеет более высокий приоритет, чем сложение +. Поэтому в выражении:

int x = 4 + 3 * 5;

сначала выполняется умножение, в результате x = 19.

Если бы сложение имело приоритет над умножением, результат был бы 35, но C# следует установленной иерархии приоритетов.


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

В таблице ниже операторы перечислены от высшего к низшему приоритету.

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

Операции присваивания имеют наименьший приоритет, а постфиксные инкремент/декремент — наивысший.


Пример 1: Приоритет операторов

using System;
namespace OperatorDemo {
    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 False

Порядок вычисления:

Во втором выражении сложение + имеет более высокий приоритет, чем сравнение >=, поэтому c + a вычисляется перед сравнением.


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

Когда два оператора имеют одинаковый приоритет, компилятор использует ассоциативность для определения порядка вычисления. Большинство операторов C# ассоциативны слева направо, но некоторые — справа налево.

Пример:

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

Так как * и / ассоциативны слева направо, умножение выполняется первым, результат 10.

Правая ассоциативность критична в цепочках присваивания:

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

Значение 3 присваивается b, затем b присваивается a, в итоге все переменные содержат 3.

Ниже приведена таблица ассоциативности операторов C#.

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

Ключевые операторы с правой ассоциативностью: унарные префиксы, тернарный оператор и все операции присваивания.


Пример 2: Ассоциативность в действии

using System;
namespace OperatorDemo {
    class OperatorAssociativity {
        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 = {a}, b = {b}, c = {c}");
        }
    }
}

Вывод:

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

Язык C

  1. Понимание ключевых слов и идентификаторов C#: правила, списки и лучшие практики
  2. Операторы C# — исчерпывающее руководство по операторам в C#
  3. Тернарный оператор в C#: краткое руководство по условным выражениям
  4. Классы и объекты в C#: Фундаменты надёжного ООП
  5. Абстрактные классы и методы в C#: практическое руководство
  6. Частичные классы и методы в C#: понимание и применение
  7. Sealed-классы и sealed-методы в C#: когда использовать, примеры и повышение безопасности кода
  8. Операторы в C++: типы, примеры и практические программы
  9. Константы и литералы в C: целочисленные, вещественные, символьные, строковые и определение констант
  10. Ввод-вывод в C: stdio.h, потоки stdin/stdout/stderr, функции getchar/putchar, gets/puts, scanf/printf