Логические и битовые операции в Python: полный справочник

Привет, коллеги! Сегодня разберём такую тему, которая, казалось бы, лежит на поверхности, но в ней часто косячат даже опытные питонисты: логические и битовые операции в Python. Казалось бы, что тут сложного? Но когда дело доходит до работы с флагами, масками, низкоуровневым протоколом или даже просто оптимизации кода — знание этих операций реально спасает время и нервы. Погнали разбираться!

Зачем вообще нужны логические и битовые операции?

Всё просто: они позволяют манипулировать отдельными битами данных, что критично в системном программировании, работе с оборудованием, сетевыми пакетами, сжатии данных, крипте и даже в обычных задачах оптимизации. Например, если у тебя есть набор флагов, удобно хранить их в одном числе и проверять/устанавливать отдельные значения через битовые операции. Логические операции — база для любого условного исполнения, фильтрации и проверки.

Что потребуется?

  • Любая современная ОС: Windows, Linux, macOS — неважно.
  • Python версии 3.6+ (хотя всё нижеописанное работает и на 2.7, но мы тут не в каменном веке).
  • Железо — любое, что тянет Python. Даже Raspberry Pi подойдёт.
  • Желание разобраться и не бояться консоли.

Установка — пошаговая инструкция

  1. Проверь, установлен ли у тебя Python:
    python --version

    или

    python3 --version
  2. Если Python не установлен — скачай с официального сайта Python и установи. На Linux обычно достаточно:
    sudo apt update
    sudo apt install python3
  3. Запусти интерактивную консоль:
    python3

    или через IDE/редактор кода.

Всё, готово! Никаких сторонних библиотек для битовых и логических операций не надо — всё в стандартной поставке.

Использование: полный список команд и вариантов

Вот тут начинается мясо. В Python есть логические операторы и битовые операторы. Не путай!

Логические операторы

  • and — логическое «И»
  • or — логическое «ИЛИ»
  • not — логическое «НЕ»

a = True
b = False
print(a and b)  # False
print(a or b)   # True
print(not a)    # False

Битовые операторы

  • & — побитовое «И»
  • | — побитовое «ИЛИ»
  • ^ — побитовое «исключающее ИЛИ» (XOR)
  • ~ — побитовое «НЕ» (инверсия)
  • << — сдвиг влево
  • >> — сдвиг вправо

x = 0b1010  # 10 в двоичной системе
y = 0b1100  # 12 в двоичной системе

print(bin(x & y))   # 0b1000
print(bin(x | y))   # 0b1110
print(bin(x ^ y))   # 0b0110
print(bin(~x))      # -0b1011 (инверсия)
print(bin(x << 2)) # 0b101000 (сдвиг влево на 2 бита) print(bin(x >> 1))  # 0b101 (сдвиг вправо на 1 бит)

Часто используемые трюки

  • Проверка, установлен ли бит: (x & (1 << n)) != 0
  • Установка бита: x |= (1 << n)
  • Сброс бита: x &= ~(1 << n)
  • Инверсия бита: x ^= (1 << n)

Ошибки и как делать не надо

  • Не путай and и &: первый работает с булевыми значениями, второй — с битами чисел.
  • Не используй битовые операции с float — только с int!
  • Проверяй порядок операций: ~x & 1 не то же самое, что ~(x & 1).
  • Не забывай про знаковость чисел: ~x даёт отрицательное число из-за способа представления в памяти.
  • Если используешь маски, всегда документируй, какой бит за что отвечает — иначе через месяц сам не разберёшься.

Пример реального использования: управление флагами в DevOps-скрипте


# Допустим, у нас есть 4 флага:
FLAG_RESTART   = 1 << 0  # 0b0001
FLAG_UPDATE    = 1 << 1  # 0b0010
FLAG_NOTIFY    = 1 << 2  # 0b0100
FLAG_BACKUP    = 1 << 3  # 0b1000

# Все флаги храним в одной переменной:
flags = 0

# Установим флаги RESTART и NOTIFY
flags |= FLAG_RESTART | FLAG_NOTIFY  # 0b0101

# Проверим, установлен ли флаг UPDATE
if flags & FLAG_UPDATE:
    print("Нужно обновление!")
else:
    print("Обновление не требуется")

# Сбросим флаг RESTART
flags &= ~FLAG_RESTART  # 0b0100

# Инвертируем флаг BACKUP
flags ^= FLAG_BACKUP    # 0b1100

print(bin(flags))

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

Заключение

Логические и битовые операции — это не только про олимпиадные задачки. В реальной жизни, особенно в DevOps, backend и системном программировании, они реально экономят кучу времени и ресурсов. Если хочется углубиться — читай официальную документацию Python по битовым операциям. Не бойся экспериментировать — только так и учатся!

Хотите прочитать больше про Администрирование?
Отзывов нет.

Ваш отзыв

Пожалуйста, заполните поля снизу и добавьте отзыв!.
Имя *
E-mail *
Сайт
Сообщение *