JavaRush /Курсы /C# SELF /Приоритет операторов и скобки в условиях

Приоритет операторов и скобки в условиях

C# SELF
3 уровень , 4 лекция
Открыта

1. Введение

Давайте начнем с бытовой аналогии. Представьте себе рецепт:

Смешайте муку, яйца и сахар взбейте добавьте масло взбейте еще раз.

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

В программировании похожая ситуация возникает, когда вы пишете сложное выражение:

bool result = a > 0 && b < 10 || c == 3;

Какой порядок? Что вычисляется первым: a > 0 && b < 10, потом || c == 3? Или всё наоборот? Без чёткого порядка вычислений компьютер может "перепутать ингредиенты" и ваш результат будет неожиданным.

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

C# (как и большинство языков программирования) использует определённую таблицу приоритетов операторов.
Операторы с более высоким приоритетом выполняются раньше, чем операторы с низким приоритетом.

Посмотрите на самую важную часть этой таблицы (для условных выражений):

Оператор Описание Приоритет
() Скобки самый высокий
! Логическое "НЕ" высокий
==, != Равно / не равно средний
<, >, <=, >= Сравнения средний
&& Логическое "И" ниже
|| Логическое "ИЛИ" ещё ниже

(Есть ещё арифметические операторы — они выше логических по приоритету.)

Главное правило

Операторы "И" (&&) имеют больший приоритет, чем "ИЛИ" (||),
то есть сначала будет вычислен "И", потом "ИЛИ".

Блок-схема вычисления приоритета условий

Сначала считается a > 0 && b < 10, потом результат сравнивается с c == 3 через ||

На практике: a > 0 && b < 10 || c == 3 — сначала считается a > 0 && b < 10, потом результат сравнивается с c == 3 через ||.

3. Направление операторов: слева направо и наоборот

Кроме приоритета, есть ещё такое слово: ассоциативность.
Это правило, в каком направлении вычисляются операторы, если они стоят "рядом" и имеют один приоритет.

Пример:

bool a = true, b = false, c = true;
bool result = a && b && c;

Вопрос: как посчитается?
Ответ: ассоциативность у &&слева направо.
Значит, сначала a && b, потом результат с c.

Применительно к условиям:

Оператор Ассоциативность
&&, || слева направо
! справа налево

4. Скобки — ваш лучший друг в сложных условиях

Вот здесь начинается магия (и спасение). Когда вы пишете выражение, скобки меняют приоритет и делают ваш код понятнее и безопаснее.

Пример 1 (без скобок):

// Мы хотим: "Если пользователь взрослый и гражданин, или если у него есть спецпропуск"
bool isAdult = age >= 18;
bool isCitizen = country == "Беларусь";
bool hasPermit = hasSpecialPass == true;

if (isAdult && isCitizen || hasPermit)
{
    Console.WriteLine("Доступ разрешён!");
}

Как считает C#:
Сначала вычисляет isAdult && isCitizen, потом результат сравнивает по || с hasPermit.

  • Допустим, isAdult = true, isCitizen = false, hasPermit = true
  • isAdult && isCitizentrue && falsefalse
  • false || truetrue

То есть, если у человека спецпропуск, всё равно пропустят.
А если без спецпропуска, но взрослый гражданин — тоже пропустят.

Пример 2 (со скобками):

if (isAdult && (isCitizen || hasPermit))
{
    Console.WriteLine("Доступ разрешён!");
}

Теперь программа сначала проверяет:
isCitizen || hasPermit, а затем этот результат вместе с isAdult.

То есть вам нужно быть взрослым и (или гражданином, или иметь спецпропуск).
Маленькая разница в скобках — огромная разница в логике!

2
Задача
C# SELF, 3 уровень, 4 лекция
Недоступна
Простое условие
Простое условие
2
Задача
C# SELF, 3 уровень, 4 лекция
Недоступна
Проверка сложного логического выражения
Проверка сложного логического выражения
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
whynot00 Уровень 1
12 сентября 2025
самый низкий наверное все таки у оператора присвоения (=) ??