Бітові оператори
Зміст
- 1. Призначення бітових операторів. Перелік
- 2. Бітовий оператор ~ (інверсія). Приклад
- 3. Оператори зсуву вліво <<, вправо >>. Приклад
- 4. Бітовий оператор & (І, AND). Приклад
- 5. Бітовий оператор ^ виключне АБО. Приклад
- 6. Бітовий оператор | АБО (OR). Приклад
- 7. Приклади використання бітових операторів
- Зв’язані теми
Пошук на інших ресурсах:
1. Призначення бітових операторів. Перелік
Мова Python підтримує роботу з двійковими розрядами (бітами) цілочисельних величин, де кожен біт числа розглядається окремо. Для забезпечення цього в Python використовуються так звані бітові або порозрядні оператори, що реалізують загальновідомі бітові операції. Підтримка бітових операторів є також в інших мовах програмування.
У бітових операторах (операціях) кожен операнд розглядається як послідовність двійкових розрядів (бітів), що приймають значення 0 або 1 (двійкова система числення). Над цими розрядами можна виконувати відомі операції (логічне “І”, логічне “АБО” і т.д.)
Перелік бітових операторів мови Python в порядку спадання пріоритету наступний:
- ~ – бітовий оператор НІ (інверсія, найвищий пріоритет);
- <<, >> – оператори зсуву вліво або зсуву вправо на задану кількість біт;
- & – бітовий оператор І (AND);
- ^ – бітове виключне АБО (XOR);
- | – бітовий оператор АБО (OR).
⇑
2. Бітовий оператор ~ (інверсія). Приклад
У бітовому операторі (операції) ~ інверсія значення кожного біту числа змінюється на протилежне. Значення біту 0 встановлюється в 1, а значення 1 встановлюється в 0. Тобто, додатнє число стає від’ємним зі зсувом на -1. Так само від’ємне число стає додатнім зі зсувом на -1.
Приклад.
# Бітовий оператор ~ НІ - інверсія a = 0b1001 # a = 9 в десятковій системі b = ~a # b = -10 - десяткова система c = bin(b) # c = -0b1010 - двійкова система a = -0b1001 # a = -9 в десятковій системі b = ~a # b = 8 - десяткова система c = bin(b) # c = 0b1000 - двійкова система a = 0b1111 # a = 15 b = ~a # b = -16 c = bin(b) # c = -0b10000 a = -0b1111 # a = -15 b = ~a # b = 14 c = bin(b) # c = 0b1110
⇑
3. Оператори зсуву вліво <<, вправо >>. Приклад
Оператори зсуву вліво << та зсуву вправо >> зсувають кожен біт на одну або декілька позицій вліво чи вправо. Загальна форма операторів наступна
op1 << op2 op1 >> op2
де op1, op2 – операнди. Операндом може бути число, змінна цілочисельного типу або вираз, що повертає цілочисельний результат.
На рисунку 1 продемонстровано роботу операторів зсуву вліво << та зсуву вправо >>. При обчисленні значення y, значення x зсувається на 1 позицію вліво (випадок а) або вправо (випадок b). Відповідно результат y множиться на 2 або ділиться на 2.
Рисунок 1. Робота операцій: а) зсув вліво << (множення на 2); b) зсув вправо >> (ділення на 2 націло)
Якщо потрібно помножити число на 16, то потрібно зсунути це число на 4 біти вліво. Якщо потрібно поділити число на 8, то потрібно зсунути це число на 3 біти вправо. Швидкість виконання операцій зсуву вища порівняно з операціями множення та ділення на числа кратні 2 в степені N (N – кількість зсунутих біт).
Приклад.
# Операції зсуву вліво << та зсуву вправо >> x = 5 # зсув вліво на 3 знаки, множення на 2**3 = 8 y = x << 3 # y = x*2**3 = 40 print('x = ', x) print('y = x<<3 = ', y) x = 25 y = x >> 2 # y = 6 print('x = ', x) print('y = x>>2 = ', y) # Для від'ємних чисел x = -10 y = x << 1 # y = -20 print('x = ', x) print('y = x<<1 = ', y) x = -100 y = x >> 3 # y = -13 print('x = ', x) print('y = x>>3 = ', y)
Результат роботи програми
x = 5
y = x<<3 = 40
x = 25
y = x>>2 = 6
x = -10
y = x<<1 = -20
x = -100
y = x>>3 = -13
⇑
4. Бітовий оператор & (І, AND). Приклад
Бітовий оператор І (AND) є бінарним і виконує побітове “І” для кожної пари бітів операндів, що розміщуються зліва та справа від знаку оператора &. Загальна форма оператора наступна
op1 & op2
де op1, op2 – операнди. Операндами можуть бути числа, змінні цілочисельного типу або вирази, що повертають цілочисельний результат.
Кожен цілочисельний операнд розглядається як набір бітів, над кожним з яких виконується побітова операція “І”.
На рисунку 2 показано роботу бітової операції “І”.
Рисунок 2. Бітовий оператор & “І”
Як видно з рисунку біт в позиції 0 першого операнда (x) обчислюється з бітом в позиції 0 другого операнду (y), відповідно біт в позиції 1 першого операнду (x) обчислюється з бітом в позиції 1 другого операнду (y) і т.д. При таких обчислення результуюче значення кожного біту визначається за наступними формулами:
0 & 0 = 0 0 & 1 = 0 1 & 0 = 0 1 & 1 = 1
Приклад.
# Бітова операція & (I, AND) x = 37 y = 58 z = x & y # z = 32 print('x = ', x) print('y = ', y) print('z = ', z)
Результат роботи програми
x = 37 y = 58 z = 32
⇑
5. Бітовий оператор ^ виключне АБО. Приклад
Бітовий оператор виключне АБО позначаєтья символом ^ і виконує операцію додавання за модулем 2 для кожного біту операндів. Загальна форма оператора наступна
op1 ^ op2
де op1, op2 – операнди, що мають цілочисельний тип.
Оператор виключне АБО (XOR) оперує двійковими розрядами. Кожен операнд розглядається як послідовність бітів. Результат побітового виключного АБО визначається за наступними формулами
0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 0 = 1 1 ^ 1 = 0
На рисунку 3 відображено приклад бітового виключного АБО для двох операндів.
Рисунок 3. Бітовий оператор ^ “виключне АБО”
Приклад.
# Бітовий оператор ^ - виключне АБО (XOR) x = 37 y = 58 z = x ^ y # z = 31 print('x = ', x) print('y = ', y) print('z = ', z)
Результат роботи програми
x = 37 y = 58 z = 31
⇑
6. Бітовий оператор | АБО (OR). Приклад
Бітовий оператор АБО (OR) є бінарною і позначається символом |. Оператор реалізує побітове логічне додавання за зразком операторів & та ^ (див. п.п. 4, 5).
Загальна форма бітового оператора | наступна
op1 | op2
де op1, op2 – операнди, які можуть бути змінними або числами цілого типу.
Для двох операндів op1, op2 бітове АБО виконується згідно з наступними правилами
0 | 0 = 0 0 | 1 = 1 1 | 0 = 1 1 | 1 = 1
На рисунку 4 продемонстровано роботу бітового оператора АБО на прикладі двох довільних операндів
Рисунок 4. Бітовий оператор АБО
Приклад.
# Бітове АБО (OR) x = 37 y = 58 z = x | y # z = 63 print('x = ', x) print('y = ', y) print('z = ', z)
Результат роботи програми
x = 37 y = 58 z = 63
⇑
7. Приклади використання бітових операторів
Приклад 1. Витягнути з числа 4,5,6 біти і визначити їх цілочисельне значення.
# Витягнути 4,5,6 біти цілого числа # ввести ціле число number = int(input('Input number: ')) # фільтр на 4,5,6 біти number &= 0b1110000 # зсунути на 4 розряди вправо number >>= 4 print('number = ', number)
Результат роботи програми
Input number: 95 number = 5
Приклад 2. Помножити значення двох чисел. У першому числі взяти біти, що розміщені у позиціях 0-5. У другому числі взяти біти, що розміщені у позиціях 0-7.
# Помножити 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)
Результат роботи програми
x = 234234253 y = 322797987 x = 13 y = 35 z = 455
⇑
Зв’язані теми
⇑