Иногда число удобно рассматривать не целиком, а как набор отдельных битов (нулей и единиц). Битовые операции работают сразу со всеми битами числа, сопоставляя их по разрядам. Они быстрые и встречаются в задачах на оптимизацию, флаги и хитрые трюки.
Оператор
Название
Правило
&
И (AND)
1, только если оба бита 1
|
ИЛИ (OR)
1, если хотя бы один бит 1
^
исключающее ИЛИ (XOR)
1, если биты разные
~
НЕ (NOT)
переворачивает все биты
<<
сдвиг влево
дописывает нули справа
>>
сдвиг вправо
отбрасывает биты справа
▶ bitwise.py
Сравните поразрядно: 1100 и 1010. У & единица остаётся только там, где в обоих числах единицы (старший разряд) → 1000. У | единица там, где хоть в одном → 1110. У ^ — где биты разные → 0110.
Сдвиги — умножение и деление на степени двойки
Сдвиг влево x << 1 дописывает справа ноль — это удвоение. Сдвиг вправо x >> 1 отбрасывает правый бит — это целочисленное деление на 2. Сдвиг на n позиций умножает или делит на 2ⁿ.
▶ shifts.py
💡Совет
Полезные трюки на битах: n & 1 равно 1 у нечётных и 0 у чётных (проверка чётности). n & (n - 1) убирает самый правый единичный бит — если результат 0, значит у числа был ровно один бит, то есть это степень двойки.
▶ tricks.py
💡Совет
Предскажите вывод. XOR обладает магией: x ^ x == 0, а x ^ 0 == x. Что напечатает код ниже? Запустите и убедитесь, что число «вернулось».
▶ predict-xor.py
Напечатается 42 и 0. Двойной XOR с одним числом отменяет сам себя (x ^ 7 ^ 7 = x), а число, поксоренное с собой, даёт 0. На этом свойстве построена классическая задача «найти единственный неповторяющийся элемент».
⚠️ Частые ошибки новичков
Ошибка. Перепутать битовые &, | с логическими and, or. 5 & 3 работает с битами (даёт 1), а 5 and 3 — это логика (даёт 3). Запустите код и сравните результаты, чтобы прочувствовать разницу.
▶ and-vs-bitand.py
Заданиерешение.py
Не используя оператор %, проверьте чётность числа n = 13 с помощью битовой операции. Сохраните в is_odd значение True, если число нечётное.
Заданиерешение.py
Умножьте число n = 6 на 8, используя только битовый сдвиг влево. Результат — в переменную result.
❓Проверь себя
Чему равно 0b110 & 0b101 (поразрядное И)?
Что делает сдвиг x << 2?
Чему равно x ^ x для любого x?
ℹ️Важно
✅ Что вы узнали
Битовые операторы: &, |, ^, ~, <<, >>.
Сдвиги — быстрое умножение/деление на степени двойки.
n & 1 — проверка чётности; n & (n-1) убирает младший бит.
Комментарии
Загрузка…
Загрузка комментариев…