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

Тренажер по Python для пользователей с начальным уровнем подготовки.

Тренажер по Python

Битовые операторы — это мощный инструмент в Python для низкоуровневых манипуляций с данными. Они работают не с числами как таковыми, а с их двоичным представлением, то есть с последовательностью нулей и единиц. Это позволяет очень эффективно решать специфические задачи: управлять флагами настроек в одном-единственном числе, работать с сетевыми протоколами, шифровать данные или просто выполнять некоторые математические операции быстрее, чем их "аналоги". В этом тренажере мы начнем с основ: познакомимся с самими операторами, научимся предсказывать их результат, а затем перейдем к практическим примерам, где битовые операции помогают элегантно решать задачи по установке, проверке или инвертированию конкретных битов. Задания построены так, чтобы вы постепенно погружались в тему, начиная с простого сопоставления и заканчивая сборкой полноценного кода.

Список тем

Результат операции AND (&)

id: 39967_task_predict_result_2

Оператор `&` (побитовое И) возвращает 1 для каждого бита, если этот бит равен 1 в обоих числах. Проанализируйте код и выберите, какой результат он выведет. Число 9 в двоичной системе это 1001, а число 5 — 0101.

Выберите правильный вариант ответа
a = 9  # 1001 в двоичной системе
b = 5  # 0101 в двоичной системе
result = a & b
print(result)
Сообщения
Проверить
Показать подсказку

Результат операции OR (|)

id: 39967_task_predict_result_3

Теперь посмотрим на оператор `|` (побитовое ИЛИ). Он возвращает 1, если бит равен 1 хотя бы в одном из чисел. Что выведет код на экран? Число 10 в двоичной системе — 1010, а 6 — 0110.

Выберите правильный вариант ответа
x = 10  # 1010
y = 6   # 0110
print(x | y)
Сообщения
Проверить
Показать подсказку

Результат операции XOR (^)

id: 39967_task_give_result_4

Оператор `^` (исключающее ИЛИ) ставит 1 только в том случае, если биты в операндах разные. Какой результат вернет данный код? Введите ответ в виде числа. (12 это 1100, 9 это 1001).

Что должно получиться?
val1 = 12  # 1100
val2 = 9   # 1001
result = val1 ^ val2
print(result)
Сообщения
Проверить
Показать подсказку

Инверсия битов (~)

id: 39967_task_give_result_5

Унарный оператор `~` (побитовое НЕ) инвертирует все биты числа. В Python это работает по правилу `~x = -x - 1` для целых чисел. Какой результат выведет код? Введите число (возможно, отрицательное).

Что должно получиться?
number = 15
inverted_number = ~number
print(inverted_number)
Сообщения
Проверить
Показать подсказку

Операция сдвига

id: 39967_task_replace_6

Операторы сдвига `<<` (влево) и `>>` (вправо) сдвигают биты числа, что эквивалентно быстрому умножению или делению на степень двойки. Вставьте пропущенный оператор и число, чтобы получить верный результат.

Заполните пропуски
# Умножение на 4
res1 = 7 input1S 2  # Должно получиться 28

# Целочисленное деление на 8
res2 = 40 input2S 3  # Должно получиться 5

print(f"Результаты: {res1}, {res2}")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Исправьте ошибку в маске

id: 39967_task_error_7

Часто битовые операции используют для проверки флагов. В этом коде мы хотим проверить, установлен ли третий бит (который имеет значение 4) в числе `permissions`. В коде допущена ошибка в логике проверки. Найдите и исправьте её.

Найдите ошибку и исправьте
permissions = 13  # 1101 в двоичной системе
READ_PERMISSION = 4  # 0100 в двоичной системе
 
# Проверяем, есть ли право на чтение
if permissions + READ_PERMISSION: 
    print("Право на чтение есть.")
else:
    print("Права на чтение нет.")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Соберите код для установки бита

id: 39967_task_build_from_parts_8

Соберите из фрагментов работающий код. Цель: установить второй бит (значение 2) в переменной `config`. Изначально `config` равен 8 (1000). После установки бита значение должно стать 10 (1010). Одна из строк лишняя.

Перетяните в правильном порядке строки из одного блока в другой
config = 8
print(config)
config = config | MASK_BIT_2
MASK_BIT_2 = 2
config = config & MASK_BIT_2
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Инвертирование бита с помощью XOR

id: 39967_task_bank_fill_9

Операция `XOR` (`^`) идеально подходит для инвертирования бита: если бит был 0, он станет 1, а если был 1 — станет 0. Перетащите элементы из банка, чтобы собрать код, который инвертирует четвертый бит (значение 8) в числе `state`.

Нужно правильно расставить в пропуски предложенные варианты
state = 13  # 1101
TOGGLE_MASK = input1S

# Инвертируем четвертый бит
state = input2S input3S TOGGLE_MASK

print(state)  # Должно получиться 5 (0101)
state
^
8
|
&
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру