Главная страница

Рабочая тетрадь 4,информатика. Рабочая тетрадь 4. Рабочая тетрадь 4


Скачать 104.57 Kb.
НазваниеРабочая тетрадь 4
АнкорРабочая тетрадь 4,информатика
Дата21.12.2021
Размер104.57 Kb.
Формат файлаdocx
Имя файлаРабочая тетрадь 4.docx
ТипДокументы
#311606
страница3 из 3
1   2   3


!!!

Реализация задач на языке программирования 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

1   2   3



написать администратору сайта