Курс 3.8 — Алгоритмы · Раздел 06 · Урок 6.2

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

Разберём побитовые логические операции и сдвиги на примерах Python.

Разберём побитовые логические операции и сдвиги на примерах Python.
6.2 — Битовые операции

Материал урока

Раз бит — это либо 0, либо 1, к числам можно применять побитовые логические операции:

  • НЕ (~)
  • И (&)
  • ИЛИ (|)
  • Исключающее ИЛИ (^)

Кроме того, есть операции сдвига: << и >>.

Инверсия (~)

Операция инверсии заменяет все 0 на 1 и все 1 на 0.

number = 5
print(~number)  # -6

Почему так?

  • Число 5 в двоичной форме (в 8 битах): 00000101.
  • Инверсия даёт: 11111010.
  • Это представление числа -6 в дополнительном коде.

Важно: отрицательные числа в памяти компьютера хранятся именно в дополнительном коде.

Конъюнкция (&)

Операция И: результат равен 1 только если оба соответствующих бита равны 1.

Пример:

print(5 & 4)   # 4
print(6 & 10)  # 2

Дизъюнкция (|) и XOR (^)

Работают так же побитово:

  • ИЛИ (|) → результат равен 1, если хотя бы один из битов равен 1.
  • Исключающее ИЛИ (^) → результат равен 1, если биты разные.

Пример:

print(5 | 3)  # 7
print(5 ^ 3)  # 6

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

  • Побитовые: & | ^ ~ << >>
  • Логические: and or not

Сдвиги (<< и >>)

Сдвиги позволяют двигать двоичное представление числа:

  • << n — сдвиг влево на n бит.
  • >> n — сдвиг вправо на n бит.
print(5 << 2)   # 20
print(29 >> 3)  # 3

Свойства сдвигов

  • Сдвиг влево на 1 бит → умножение на 2.
  • Сдвиг вправо на 1 бит → целочисленное деление на 2.
print(7 << 1)  # 14
print(7 >> 1)  # 3

Быстрый способ вычислить 2ⁿ

Если сдвинуть 1 влево на n позиций, получаем число 2^n.

print(1 << 5)  # 32

Таким образом, битовые операции позволяют:

  • работать с числами на уровне двоичных представлений;
  • быстро умножать/делить на степени двойки;
  • проверять и изменять отдельные биты;
  • эффективно хранить и обрабатывать множества (через битовые маски).