Побитовые операторы Python - руководство

На чтение
5 мин
Дата обновления
28.02.2026
#COURSE##INNER#

Изучение побитовых операций Python открывает целый мир манипуляций данными на самом фундаментальном уровне. Эти операции позволяют вам выполнять быстрые и эффективные операции с бинарными данными, обеспечивая повышенную производительность для критически важных приложений.

В этом руководстве мы подробно рассмотрим все доступные побитовые операторы Python, включая:

  • Побитовое И (&)
  • Побитовое ИЛИ (|)
  • Побитовое исключающее ИЛИ (^)
  • Не (~)
  • Циклический сдвиг влево (<<)
  • Циклический сдвиг вправо (>>)

Основные операции

Существуют базовые побитовые операции, которые лежат в основе более сложных:

И (AND): Выполняет побитовое И для каждого бита двух целых чисел, возвращая число, в котором установлены биты только в тех позициях, где бит установлен в обоих числах.

ИЛИ (OR): Выполняет побитовое ИЛИ для каждого бита двух целых чисел, возвращая число, в котором бит установлен в любой из позиций, где бит установлен в любом из чисел.

Исключающее ИЛИ (XOR): Выполняет побитовое исключающее ИЛИ для каждого бита двух целых чисел, возвращая число, в котором бит установлен только в тех позициях, где бит установлен в одном из чисел, но не в обоих.

НЕ (NOT): Выполняет побитовое НЕ для каждого бита целого числа, возвращая число, в котором бит имеет противоположное значение.

Сдвиг влево (`<<`): Сдвигает биты числа влево на указанное количество позиций, заполняя освободившиеся биты нулями.

Сдвиг вправо (`>>`): Сдвигает биты числа вправо на указанное количество позиций, заполняя освободившиеся биты нулями или единицами (в зависимости от типа данных).

Операторы смещения и циклического сдвига

В Python есть два основных оператора сдвига:

Оператор сдвига вправо (>>): сдвигает биты числа вправо, отбрасывая крайние левые биты.

Оператор циклического сдвига вправо (>>=): аналогичен оператору сдвига вправо, но крайние левые биты перемещаются в конец числа.

Аналогичные операторы существуют и для сдвига влево (<< и <<=).

Сдвиг числа на n битов вправо или влево эквивалентен умножению или делению числа на 2^n соответственно.

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

& (логическое И): возвращает побитовое значение "0" для всех битов, кроме тех, которые установлены в 1 в обоих операндах.

| (логическое ИЛИ): возвращает побитовое значение "1" для всех битов, которые установлены в 1 в любом из операндов.

^ (исключающее ИЛИ): возвращает побитовое значение "1" для всех битов, установленных в 1 в одном из операндов, но не обоих.

~(побитовое НЕ): инвертирует биты операнда, то есть "0" становятся "1", а "1" становятся "0".

Использование побитовых операторов для манипулирования флагами

Флаги – это битовые маски, используемые для представления набора булевых значений. Побитовые операторы предоставляют удобный способ манипулирования флагами:

AND (&): Изначально флагов. Возвращает новое значение флага, в котором каждый бит устанавливается в 1 только в том случае, если соответствующие биты исходных флагов установлены в 1.

OR (|): Объединение флагов. Возвращает новое значение флага, в котором каждый бит устанавливается в 1, если хотя бы один из соответствующих битов исходных флагов установлен в 1.

XOR (^): Исключающее ИЛИ флагов. Возвращает новое значение флага, в котором каждый бит устанавливается в 1, если ровно один из соответствующих битов исходных флагов установлен в 1.

NOT (~): Инвертирование флага. Возвращает новое значение флага, в котором каждый бит инвертируется (0 становится 1, а 1 становится 0).

Оператор Описание
& Изначально флагов
| Объединение флагов
^ Исключающее ИЛИ флагов
~ Инвертирование флага

Использование побитовых операторов для оптимизации кода

Побитовые операции могут существенно повысить эффективность кода, особенно при работе с большими блоками данных. Рассмотрим несколько способов их оптимизации:

Нахождение индекса элемента в массиве:

`index = bin(x).count("1")`

Находит количество единиц в бинарном представлении `x`, что эквивалентно индексу элемента в массиве.

Проверка на нулевые и однородные биты:

`res = x & (x - 1) == 0`

Проверяет, является ли `x` степенью двойки.

`res = all(bit in [0, 1] for bit in bin(x))`

Проверяет, содержит ли `x` только нули и единицы.

Циклический сдвиг:

`res = (x << n) | (x >> (32 - n))`

Эффективно выполняет циклический сдвиг `x` на `n` бит влево.

Быстрый поиск наибольшей единицы:

`index = bin(x).rfind("1")`

Находит позицию крайней правой единицы в `x`.

Быстрая проверка на чётность:

`res = (x & 1) == 0`

Определяет, является ли число чётным, проверяя последний бит.

Применение побитовых операторов в криптографии

Побитовые операторы широко используются в криптографии для выполнения различных операций над данными с целью обеспечения безопасности и конфиденциальности. Вот некоторые распространенные применения:

  • XOR: Операция XOR используется в шифре Вернама (одноразовый блокнот) для эксклюзивного ИЛИ двух наборов данных, один из которых является ключом. Результат получается случайным и не связанным ни с одним из исходных наборов.
  • AND: Операция AND используется для фильтрации битов из набора данных в зависимости от битов другой. Это можно использовать для маскирования битов, выявления общих значений и выполнения условных операций.
  • OR: Операция OR используется для объединения битов из двух наборов данных, создавая результирующий набор, который содержит все уникальные биты из обоих исходных наборов.
  • Сдвиг: Операции сдвига используются для смещения битов набора данных влево или вправо. Это может применяться для умножения или деления целого числа на 2, а также для создания циклических смещений.

Побитовые операторы обеспечивают эффективный и безопасный способ манипулирования данными в криптографических приложениях, таких как криптография с открытым ключом, хеширование и цифровая подпись.

Вопрос-ответ:

Что такое побитовые операторы в Python?

Побитовые операторы - это операторы, которые производят операции над двоичными представлениями значений. Они выполняют операцию побитно, обеспечивая более детальный контроль над манипуляциями с битами.

Какие существуют типы побитовых операторов в Python?

В Python существует 6 основных типов побитовых операторов: AND (&), OR (|), XOR (^), сдвиг влево (<<), сдвиг вправо (>>) и операция отрицания (~).