Битовые операции: маски, флаги и двоичная логика
Автор: Казачкин Даниил Михайлович · Обновлено
Битовые операции работают с двоичным представлением чисел. Они встречаются в школьной информатике рядом с системами счисления, логикой, кодированием и олимпиадными задачами.
Основные операции:
&— побитовое И;|— побитовое ИЛИ;^— исключающее ИЛИ;<<— сдвиг влево;>>— сдвиг вправо.
Проверка четности и отдельных битов
Число четное, если его последний двоичный бит равен 0.
number = int(input())
if number & 1 == 0:
print('четное')
else:
print('нечетное')Чтобы проверить k-й бит, используют маску 1 << k.
number = 13
k = 2
if number & (1 << k):
print('бит установлен')
else:
print('бит не установлен')Число 13 в двоичной системе — 1101, поэтому бит с номером 2 установлен.
Флаги в одной переменной
Маска позволяет хранить несколько признаков в одном числе. Например, ученик решил задачи 0, 2 и 3.
mask = 0
mask |= 1 << 0
mask |= 1 << 2
mask |= 1 << 3
print(bin(mask))Когда это полезно
Битовые операции нужны не в каждой школьной задаче, но они хорошо связывают программирование с устройством компьютера. Они помогают понять двоичную запись, логические операции, кодирование признаков и перебор подмножеств.
Начинайте с простых проверок: четность, количество единиц в двоичной записи, установка и снятие бита. После этого маски перестают выглядеть магией и становятся компактным инструментом.
Практикум: флаги доступа в одном числе
Назначьте битам права: чтение — 1, запись — 2, публикация — 4, администрирование — 8. Соберите права редактора из чтения, записи и публикации через побитовое ИЛИ. Проверьте каждое право через побитовое И, затем удалите запись и убедитесь, что остальные биты сохранились. Выведите значения в четырёхбитном виде. Сравните маски 5 и 10 и объясните позиции единиц. Подготовьте тест, где право уже установлено: повторное включение не должно менять число.
Контрольная точка
Чем логическое and отличается от побитового & для маски 6 и права 2? Проследите отдельные разряды и сформулируйте условие, при котором результат проверки считается ненулевым.
Частые вопросы
Зачем нужны маски, если можно хранить список прав?
Список часто понятнее в прикладном коде. Маски полезны в компактных протоколах, низкоуровневых форматах и задачах по двоичной логике. Их стоит применять там, где договорённость о каждом бите явно зафиксирована.
Связанные исследования
- Фильтр Блума: вероятность ошибки и реализация на Python — Фильтр Блума с формулами и Python: расчёт памяти, двойное хеширование, false positive, ограничения удаления и production-чек-лист.
Источники
- Босова Л.Л. Информатика. Базовый курс: учебник для 7-9 классов. - М.: БИНОМ. Лаборатория знаний.
- Поляков К.Ю., Еремин Е.А. Информатика. 10-11 классы. Углубленный уровень.
- Python Documentation: The Python Tutorial.