- •Застосування логіки висловлювань в програмній інженерії методичні вказівки
- •Теоретичні відомості.
- •Нормальні форми логіки висловлювань
- •Карти Карно
- •Кодистійкі до перешкод
- •Логічні побітові операції
- •Завдання до виконання
- •Контрольні запитання.
- •Список літератури
- •Застосування логіки висловлювань в програмній інженерії методичні вказівки
Логічні побітові операції
У таблиці 5.1 наведено приклади істиннісних значень логічних змінних у різних мовах програмування.
Таблиця 5.1
Істиннісні значення логічних змінних
Мова програмування |
Тип змінної |
Значення |
С++ |
Bool |
false (0), true (всі цифри,окрім нуля) |
Java |
Bool |
false, true |
Pascal |
Boolean |
false, true |
В мовах програмування є ряд операцій, які дозволяють працювати з бітами. Розглянемо логічні побітові операції та логічні операції на прикладі мови програмування С++.
Основними є чотири побітові оператори:
& – побітове логічне«і»;
|–побітове логічне«або»;
~ – побітове логічне заперечення;
^ – побітове логічне «альтернативне або».
Приклад 5.1. Розглянемо наступні цілі числа в бітовому представленні:
A =1010 таB= 1100,
тоді отримаємо такі результати (знову ж таки, в бітовому представленні) виконання відповідних операторів:
A&B= 1000;
A | B= 1110;
A ^ B= 0110;
~ A= 11…110101.
Звернемо увагу на четвертий приклад: тут кількість одиниць в старших розрядах залежить від типу даних, яким представлено число А. Наприклад, якщо це 32-розрядне ціле число, то загальна кількість бітів повинна бути 32, тобто в прикладі зліва стоятиме 28 одиниць. ▲
Приклад 5.2. Використання булівської функції альтернативне «або». Розглянемо таку задачу: необхідно поміняти місцями вміст двох змінних, без використання допоміжної змінної. Є варіант вирішення цієї задачі за допомогою алгебраїчних операцій, але розглянемо її рішення за допомогою операції альтернативне «або». Нехай маємо дві змінні х та у. Щоб поміняти їхні значення місцями, необхідно виконати наступні дії:
x=xy
y=yx
x=xy▲
Для маніпуляції бітами знадобляться ще два оператори – оператори побітового зсуву:
<< – зсув вліво;
>> – зсув вправо.
Оператор зсуву вліво a<<bзсуває біти числаaвліво наbпозицій. Аналогічно оператор зсуву вправо зсуває біти вправо. При цьому, біти, що дописуються до числа заповнюються нулями.
Приклад 5.3.
9<<2 повертає 36, тому що 1001 зрушується на 2 біта вліво і стає рівним 100100, що рівне в десятковій системі 36.
9>>2 повертає 2, тому що 1001 зрушується на два біта управо і стає 10, що рівне в десятковій системі 2. Аналогічно, -9>>2 повертає -3, тому що знак зберігається.▲
Взагалі кажучи, a<<bце те саме, що числоaдомножити на 2b. Аналогічноa>>bеквівалентно цілочисельному діленнюaна 2b. Звідси можна зробити корисний висновок:
2a= 1<<a.
Операції побітового зсуву найчастіше використовують для встановлення певного біту в числі. Наприклад, 1<<i– це число, в якомуi‑ий біт встановлений (дорівнює 1), а всі решта біти рівні нулю.
У табл. 5.2. наведено приклади побітових операцій умовах програмування.
Таблиця 5.2.
Приклади побітових операцій
Мова програ-мування |
Побіто-ве логічне «і» |
Побіто-ве логічне «або» |
Побіто-ве логічне «не» |
Побітове логічне «альтерна-тивне або» |
Зсув вліво |
Зсув впра-во |
С++ |
& |
| |
~ |
^ |
<< |
>> |
Java |
& |
| |
~ |
^ |
<< |
>> |
Pascal |
and |
or |
not |
xor |
shl |
shr |
Логічні операції
Логічні операції приймають логічні (булеві) значення як операнди. Вони повертають логічне значення. Логічні значення true(істина) і false(фальш).
&& логічне «і».Використання: вираз1&&вираз2. Логічне «і» повертає оператору true, якщо обидва логічні вирази і вираз1 і вираз2 true. Інакше, повертається false.
|| логічне «або». Використання: вираз1||вираз2. Логічне «або» повертає оператору true, якщо хоч би один з логічних виразів є true. Якщо і вираз1 і вираз2 false, то повертається false.
! логічне «не». Використання: !вираз1. Логічне «не» – унарний оператор, який заперечує вираз операнда вираз1. Тобто якщо вираз1 true, то повертається false, і якщо вираз1 false, то повертається true.
Приклад 5.4.
(2>3) &&(2>1)=false;
(2>0) &&(2>1)=true;
(2<0) &&(2<1)=false;
(2>3) || (2>1)=true;
(2>0) || (2>1)=true;
(2<0) || (2<1)=false;
a!=5; //aне рівне 5
!(5<3) // 5 не менше 3▲