2026/27, 10В, Python: Битовые операции (часть1)

Общая информация по задачам

Во всех задачах ввод-вывод может быть как стандартным, так и файловым (input.txt, output.txt).

Во всех начальных упражнениях (если не оговорено иное) нельзя использовать арифметические операторы сложения, умножения, вычитания, деления, взятия остатка. Вместо них используем побитовые операторы &, |, ~, ^, <<, >>.

A: 2ᵏ

Дано число \(k\), выведите число \(2^k\), то есть число, у которого \(k\)-й бит равен 1, а остальные — нули.

Пример

ВводВывод
8
256

B: 2ᵏ + 2ⁿ

Даны два неравных целых неотрицательных числа: \(k\) и \(n\). Вычислите \(2^k+2^n\).

Пример

ВводВывод
0 1
3

C: Обнулить последние биты

Дано целое число \(a\) и целое неотрицательное число \(k\). Обнулите у числа \(a\) его последние \(k\) бит и выведите результат.

Пример

ВводВывод
3 1
2

D: Установить бит

Дано целое число \(a\) и целое неотрицательное число \(k\). Выведите число, которое получается из числа \(a\) установкой значения \(k\)-го бита равным 1.

Пример

ВводВывод
12 1
14

E: Значение бита

Дано целое число \(a\) и целое неотрицательное число \(k\). Выведите значение \(k\)-го бита числа \(a\), то есть 0 или 1.

Пример

ВводВывод
179 0
1

F: Инвертировать бит

Дано целое число \(a\) и целое неотрицательное число \(k\). Выведите число, которое получается из числа \(a\) инвертированием \(k\)-го бита.

Пример

ВводВывод
15 2
11

G: Обнулить бит

Дано целое число \(a\) и целое неотрицательное число \(k\). Выведите число, которое получается из числа \(a\) установкой значения \(k\)-го бита равным 0.

Пример

ВводВывод
14 1
12

H: Вырезать бит

Дано целое число \(a\) и целое неотрицательное число \(k\). Выведите число, которое получается из числа \(a\) удалением \(k\)-го бита. Старшие биты, чьи номера больше чем \(k\), сдвигаются вправо.

В решении можно использовать операции +1 и -1.

Пример

ВводВывод
21 2
9

I: Сменить регистр символа

Сделайте то, что вы так любите — изучите таблицу ASCII и как связаны коды заглавных и строчных букв. Используя битовые операции с ASCII-кодами символа (и не используя арифметические операции), поменяйте регистр этого символа.

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

Пример

ВводВывод
Hello
hELLO

J: Обрезать старшие биты

Дано целое число \(a\) и натуральное число \(k\). Выведите число, которое состоит только из \(k\) последних бит числа \(a\) (то есть обнулите все биты числа \(a\), кроме последних \(k\)).

Пример

ВводВывод
126 3
6

K: 2ᵏ + 2ⁿ - 2

Даны два возможно равных целых неотрицательных числа \(k\) и \(n\). Вычислите \(2^k+2^n\).

Примеры

ВводВывод
0 1
3
1 1
4

L: Быстрое вычисление

Даны числа \(a\) и \(b\). Используя только битовые операции и операции сложения и вычитания вычислите число \(x = (18a + [\frac{b}{16}]) \bmod 32\). Выведите результат на экран.

Примеры

ВводВывод
1 2
18
2 16
5