|
Рабочая тетрадь 4,информатика. Рабочая тетрадь 4. Рабочая тетрадь 4
!!! Реализация задач на языке программирования Python
1. Теоретический материал
| В Pythonсуществует возможность работы с двоичными разрядами (битами) целых величин. При этом каждый бит числа рассматривается отдельно. Для этого в Pythonзадействованы битовые (поразрядные) операторы, которые реализуют битовые операции.
В побитовых операторах (операциях) операндырассматриваютсякак последовательность бит (нулей или единиц). Над разрядами существует возможность выполнять известные логические операции (логическое «ИЛИ», логическое «И», и т.д.).
Битовые операциивPython в порядке убывания приоритета представлены ниже: Операции
| Назначение
|
| побитовое НЕ (инверсия);
| <<,>>
| битовые сдвиги влево и вправо;
| &
| побитовое И;
| ^
| побитовое исключающее ИЛИ (XOR);
| |
| побитовое ИЛИ (OR).
|
В битовойинверсии значение любого бита числа меняется на противоположное. У числа при этом меняется знак со смещением на -1.
Операторы сдвига влево << и сдвига вправо >> сдвигают биты на одну или несколько позиций влево или вправо соответственно.
Битовый оператор И (AND) есть бинарным и выполняет побитовое «И» для каждой пары битов операндов, которые размещаются слева и справа от знака оператора &.
Битовый оператор «исключительное ИЛИ» обозначается ^и выполняет операцию сложения по модулю 2 для любого бита операндов.
Битовый оператор ИЛИ (OR) символом|. Оператор реализует побитовое логическое сложение.
|
2. Пример
| Задача:
|
| Дано число x = 37, y = 58.
Найти x, x>>3, x<<2, x&y, x^y, x|y
| Решение (код программы):
|
| x, y = 37, 58
#x в десятичной и двоичной системе
print('x = ', x, ' x_bin = ', bin(x))
#y в десятичной и двоичной системе
print('y = ', y, ' y_bin = ', bin(y))
#x в десятичной и двоичной системе
a = x
print('x =', a, ' x_bin = ', bin(a))
#x>>3 в десятичной и двоичной системе
b = x >> 3
print('x>>3 =', b, ' (x>>3)_bin = ', bin(b))
#x<<2 в десятичной и двоичной системе
c = x << 2
print('x<<2 =', c, ' (x<<2)_bin = ', bin(c))
#x&y в десятичной и двоичной системе
d = x & y
print('x&y =', d, ' (x&y)_bin = ', bin(d))
#x^y в десятичной и двоичной системе
e = x ^ y
print('x^y =', e, ' (x^y)_bin = ', bin(e))
#x|y в десятичной и двоичной системе
f = x | y
print('x|y =', f, ' (x|y)_bin = ', bin(f))
| Задача:
|
| Вытянуть из числа 4,5,6 биты и определить их целочисленное значение.
| Решение (код программы):
|
| number = int(input('Input number: '))
# фильтр на 4,5,6 биты
number&= 0b1110000
# сдвинуть на 4 разряда вправо
number >>= 4
print('number = ', number)
| Задача:
|
| Умножить значения двух чисел. В первом числе взять биты, которые размещенные в позициях 0-5. Во втором числе взять биты, которые размещены в позициях 0-7.
| Решение (код программы):
|
| x = int(input('x = '))
y = int(input('y = '))
# фильтр на 0-5 биты
x&= 0b11111
# фильтр на 0-7 биты
y&= 0b1111111
# умножить
z = x*y
print('x = ', x)
print('y = ', y)
print('z = ', z)
|
3. Задания
| Задача:
|
| Даны два различных числаkиn. Выведите значение 2k+ 2n, используя только битовые операции.
| Решение (код программы):
|
| k=int(input())
n=int(input())
print((1<
| Задача:
|
| Ввести число n > 0 с клавиатуры. Если число n является точной степенью двойки, вывести “YES”, в противном случае “NO”.
| Решение (код программы):
|
| n = int(input())
if n & (n - 1) :
print("no")
else:
print("yes")
| Задача:
|
| Даны целые числа aиk. Выведите число, которое получается изаустановкой значенияk-го бита в 1.
| Решение (код программы):
|
| a=int(input())
k=int(input())
z=1<<(k-1)
print(a|z)
| Задача*:
|
| Дано целые числаnиk. Обнулите в числеnего последниеkбит и выведите результат. Рекомендуется сделать эту задачу без использования циклов.
| Решение (код программы):
|
| ‘’’
a=int(input())
k=int(input())
z=1< print(bin(z&a))
‘’’
Не работает программа, например при вводе 15 2, выводит 100 или 15 1 выводит 10
| 2>2> |
|
|