Приоритет операторов: & и == в Python

Приоритет операторов: & и == в Python

@python_quiz

Разберем этот квиз

Короткий фрагмент кода:

python

Что он выведет и почему?

Быстрый ответ

Код выведет:

Пошаговый разбор выражения

Выражение в условии тернарного оператора — это:

python

Важно: в Python оператор сравнения (==) имеет более высокий приоритет, чем побитовый оператор &. Поэтому выражение парсится как:

python

Дальше:

  1. mask == mask — это булево выражение, дающее True.
  2. В Python bool — подкласс int, и True ведёт себя как 1.
  3. Выполняется побитовое И: flags & True0b0010 & 0b00010b00000.
  4. В тернарном операторе 0 интерпретируется как ложь, поэтому печатается 'NOT SET'.

Демонстрация в коде

python

Анализ вариантов ответов (коротко)

  • "Выведет: SET" — логично, если думать, что выражение парсится как (flags & mask) == mask. Однако без скобок это не так.
  • "Выведет: NOT SET" — это фактический результат из-за приоритета == над &.
  • "Будет исключение TypeError" — не возникнет, потому что побитовый & с bool допустим (True1).
  • "Ничего не выведет" — неверно: print всегда что-то выведет.

Как писать безопасно и читабельно

Чтобы избежать таких сюрпризов, всегда ставьте скобки, когда проверяете битовые маски:

python

Это однозначно и читаемо.

Вывод

При работе с битовыми операциями будьте внимательны к приоритету операторов. Для проверок масок всегда используйте явные скобки — это предотвращает логические ошибок и делает код понятнее для коллег (и для вас самих через месяц).

Report Page