Понимание приоритета и ассоциативности операторов в C: четкое руководство
Приоритет операторов
Приоритет операторов определяет, какой оператор выполняется первым, если в выражении более одного оператора.
Рассмотрим пример:
int x = 5 - 17 * 6;
В C приоритет * выше, чем - и =. Следовательно, 17 * 6 вычисляется первым. Затем выражение с - вычисляется, так как приоритет - выше, чем у =.
Вот таблица приоритета операторов от высшего к низшему. Свойство ассоциативности будет обсуждено вскоре.
Таблица приоритета и ассоциативности операторов
| Оператор | Значение оператора | Ассоциативность |
|---|---|---|
| ()[] -> . |
Функциональный вызов Ссылка на элемент массива Косвенный выбор члена Прямой выбор члена |
Слева направо |
| ! ~ + - ++ -- & * sizeof (type) |
Логическое отрицание Побитовое дополнение (1's) Унарный плюс Унарный минус Инкремент Декремент Разыменование (Адрес) Ссылка на указатель Возвращает размер объекта Приведение типа (конверсия) |
Справа налево |
| * / % |
Умножение Деление Остаток |
Слева направо |
| + - |
Бинарный плюс (Сложение) Бинарный минус (Вычитание) |
Слева направо |
| << >> |
Сдвиг влево Сдвиг вправо |
Слева направо |
| < <= > >= |
Меньше чем Меньше или равно Больше чем Больше или равно |
Слева направо |
| == != |
Равно Не равно |
Слева направо |
| & | Побитовое И | Слева направо |
| ^ | Побитовое исключающее ИЛИ | Слева направо |
| | | Побитовое ИЛИ | Слева направо |
| && | Логическое И | Слева направо |
| || | Логическое ИЛИ | Слева направо |
| ?: | Условный оператор | Справа налево |
| = *= /= %= += -= &= ^= |= <<= >>= |
Простое присваивание Присваивание произведения Присваивание частного Присваивание остатка Присваивание суммы Присваивание разности Присваивание побитового И Присваивание побитового XOR Присваивание побитового ИЛИ Присваивание левого сдвига Присваивание правого сдвига |
Справа налево |
| , | Разделитель выражений | Слева направо |
Ассоциативность операторов
Ассоциативность операторов определяет направление, в котором выражение вычисляется. Например,
b = a;
Здесь значение a присваивается b, а не наоборот. Это потому, что ассоциативность оператора = справа налево.
Также, если два оператора одного приоритета (приоритета) присутствуют, ассоциативность определяет направление, в котором они выполняются.
Рассмотрим пример:
1 == 2 != 3
Здесь операторы == и != имеют одинаковый приоритет. И их ассоциативность слева направо. Следовательно, 1 == 2 выполняется первым.
Выражение выше эквивалентно:
(1 == 2) != 3
Примечание: Если утверждение имеет множественные операторы, вы можете использовать скобки () для дела кода более читаемым.
Содержание
Язык C
- Структура программы на C: разбор Hello World и процесс компиляции
- Оператор switch в C: синтаксис, логика и практический пример
- Структуры (struct) в C++: объяснение с практическим примером
- C# против C++: четкое сравнение особенностей, производительности и сценариев использования
- Как передавать одномерные и двумерные массивы в функции в C — практическое руководство
- Модели наследования в C++: множественное, многоуровневое, иерархическое
- Область видимости переменных в C++: локальные и глобальные
- Освоение условных операторов C++: if, if...else и вложенные if...else
- Операторы в C: исчерпывающее руководство
- Интерфейсы в C++: абстрактные классы и чисто виртуальные функции