русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Логічні операції


Дата додавання: 2014-04-22; переглядів: 1322.


В мові програмування С++ застосовуються три логічні операції:

1) ! логічне заперечення, унарна операція;

2) && логічне І, бінарна операція;

3) || логічне АБО, бінарна операція.

Операндами логічних операцій є логічні дані – істина (true) і хибність (false). Результатом логічної операції є величина логічного типу. Операндами також можуть бути числові дані: будь яке не нульове значення – це істина, нуль – хибність. Цей підхід використовується в мові програмування С, в якій немає логічного типу даних bool.

Операція логічного заперечення змінює логічне значення на протилежне. Тобто,

 

#include <iostream>

using namespace std;

int main(){

bool a = true;

cout << a << endl; // 1

cout << !a << endl; // 0

}

 

Результат бінарної операції && буде істинним (не буде дорівнювати нулю), тільки в тому разі, коли обидва операнди є істинними (не дорівнюють нулю). Результат виконання операції || буде істинним, коли істинним є хоча б один з операндів.

Логічні вирази в С++ не обов’язково мають бути обчислені повністю. Як тільки значення виразу стає однозначним, подальші обчислення припиняються. При цьому, лівий операнд логічної операції обчислюється першим, а правий – другим. Це дає можливість записувати вирази, в яких одразу виконується зміна даних і перевірка. В деяких випадках це може призводити до некоректної роботи програми. Наприклад:

 

1 #include <iostream>

2 using namespace std;

3 int main(){

4 int a1 = 0, b1 = 1, c1 = 2;

5 int a2 = 0, b2 = 1, c2 = 2;

6 bool r;

7 r = b1 < c1 && ++a1 > 0; // r = true

8 cout << "a1 = " << a1 << endl; // a = 1

9 r = b2 > c2 && ++a2 > 0; // r = false

10 cout << "a2 = " << a2 << endl; // a = 0

11 }

 

В програмі обчислення значення змінної r виконується в рядках 7 і 9. В обох випадках використовують логічну операцію І. При виконанні операції І першим буде обчислене значення лівого операнда. Якщо це false, то незалежно від значення правого операнда результат виконання операції буде false, і вираз справа від знака операції І обчислений не буде. В прикладі в рядку 7 обчислюються вирази і зліва, і заправа від знака операції І, в рядку 9 – лише зліва. Таким чином, незважаючи на те, що пріоритет операції префіксного інкременту більший пріоритетів логічних операцій і операцій порівняння, в рядку 9 змінна а не буде збільшена на одиницю.


<== попередня лекція | наступна лекція ==>
Операції порівняння | Операції присвоєння


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн