Логічні оператори в C використовуються для комбінування кількох умов/обмежень. Логічні оператори повертають 0 або 1, це залежить від того, чи є результат виразу істинним чи хибним. У програмуванні на C для прийняття рішень ми використовуємо логічні оператори.
У мові C є 3 логічні оператори:
- Логічне І ( && ) Логічне АБО ( || ) Логічне НІ ( ! )
Типи логічних операторів
1. Логічний оператор І (&&)
Якщо обидва операнди відмінні від нуля, умова стає істинною. В іншому випадку результат має значення 0. Тип результату – int. Нижче наведено таблицю істинності для логічного оператора І.
| X | І | X && Y |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 0 |
Синтаксис
(operand_1 && operand_2)>
приклад
C
// C program for Logical> // AND Operator> #include> // Driver code> int> main()> {> >int> a = 10, b = 20;> >if> (a>0 && b> 0) {> >printf>(>'Both values are greater than 0
'>);> >}> >else> {> >printf>(>'Both values are less than 0
'>);> >}> >return> 0;> }> |
>
>Вихід
Both values are greater than 0>
2. Логічний оператор АБО ( || )
Умова стає істинною, якщо будь-яка з них відмінна від нуля. В іншому випадку він повертає false, тобто 0 як значення. Нижче наведено таблицю істинності для логічного оператора АБО.
| X | І | X || І |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
Синтаксис
1нф 2нф 3нф
(operand_1 || operand_2)>
приклад
C
// C program for Logical> // OR Operator> #include> // Driver code> int> main()> {> >int> a = -1, b = 20;> >if> (a>0 || b> 0) {> >printf>(>'Any one of the given value is '> >'greater than 0
'>);> >}> >else> {> >printf>(>'Both values are less than 0
'>);> >}> >return> 0;> }> |
>
>Вихід
Any one of the given value is greater than 0>
3. Логічний оператор НЕ (!)
Якщо умова істинна, логічний оператор НЕ зробить її хибною, і навпаки. Нижче наведено таблицю істинності для логічного оператора НЕ.
| X | !X |
|---|---|
| 0 | 1 |
| 1 | 0 |
Синтаксис
! (operand_1 && operand_2)>
приклад
C
// C program for Logical> // NOT Operator> #include> // Driver code> int> main()> {> >int> a = 10, b = 20;> >if> (!(a>0 && b> 0)) {> >// condition returned true but> >// logical NOT operator changed> >// it to false> >printf>(>'Both values are greater than 0
'>);> >}> >else> {> >printf>(>'Both values are less than 0
'>);> >}> >return> 0;> }> |
>
>
Логічні оператори короткого замикання
Якщо результат можна визначити шляхом обчислення попереднього логічного виразу без оцінки наступних операндів, це називається коротким замиканням.
Коротке замикання можна побачити в рівнянні, що має більше одного логічного оператора. Вони можуть І, АБО або обидва.
1. Коротке замикання в логічному операторі І
Логічний оператор І повертає істину тоді і тільки тоді, коли всі операнди мають значення істини. Якщо перший операнд хибний, наступні операнди не будуть оцінені. Це пояснюється тим, що навіть якщо наступні операнди отримають значення true, уся умова все одно повертатиме false.
приклад
C++
// C++ Program to illustrate short circuiting in Logical AND> #include> using> namespace> std;> // utility function to check positive> bool> is_positive(>int> number)> {> >if> (number>0)> >return> true>;> >else> >return> false>;> }> // utility function to check if the number is even> bool> is_even(>int> number)> {> >if> (number % 2 == 0)> >return> true>;> >else> >return> false>;> }> // driver code> int> main()> {> >int> x = 10;> >// Both conditions are evaluated> >if> (is_positive(x) && is_even(x)) {> >cout <<>'Both conditions are satisfied.'> << endl;> >}> >else> {> >cout <<>'Conditions not satisfied.'> << endl;> >}> >int> y = -5;> >// The first condition is evaluated and found to be> >// false, so the second condition is not evaluated> >if> (is_positive(y) && is_even(y)) {> >cout <<>'Both conditions are satisfied.'> << endl;> >}> >else> {> >cout <<>'Conditions not satisfied.'> << endl;> >}> >return> 0;> }> |
>
>Вихід
Both conditions are satisfied. Conditions not satisfied.>
2. Коротке замикання в логічному операторі АБО
Оператор АБО повертає істину, якщо принаймні один операнд має значення істина. Якщо перший операнд є істинним, наступні операнди не будуть оцінені. Це пояснюється тим, що навіть якщо наступні операнди отримають значення false, вся умова все одно повертатиме значення true.
приклад
C++
// C++ program to illustrate the short circuiting in Logical> // OR> #include> using> namespace> std;> // utility function to check positive number> bool> is_positive(>int> number)> {> >if> (number>0)> >return> true>;> >else> >return> false>;> }> // utility function to check if the number is even> bool> is_even(>int> number)> {> >if> (number % 2 == 0)> >return> true>;> >else> >return> false>;> }> // driver code> int> main()> {> >int> x = 8;> >// The first condition is evaluated and found to be> >// true, so the second condition is not evaluated> >if> (is_positive(x) || is_even(x)) {> >cout <<>'At least one condition is satisfied.'> ><< endl;> >}> >else> {> >cout <<>'Conditions not satisfied.'> << endl;> >}> >int> y = -5;> >// The first condition is evaluated and found to be> >// false, so the second condition is evaluated> >if> (is_positive(y) || is_even(y)) {> >cout <<>'At least one condition is satisfied.'> ><< endl;> >}> >else> {> >cout <<>'Conditions not satisfied.'> << endl;> >}> >return> 0;> }> |
>
>Вихід
At least one condition is satisfied. Conditions not satisfied.>
Поширені запитання щодо логічних операторів
Q1. Який пріоритет логічних операторів у програмуванні?
відповідь:
Попередність логічних операторів: НЕ, І, АБО. Однак завжди рекомендується використовувати круглі дужки, щоб зробити порядок оцінки ясним і уникнути плутанини.
Q2. Чи можуть логічні оператори об’єднуватися разом?
відповідь:
Так, логічні оператори можуть бути об’єднані разом для створення складних умов. Наприклад, ми можемо поєднати кілька операторів логічного І (&&) або логічного АБО (||) в одному виразі, щоб оцінити кілька умов одночасно.
Q3. Що буде виводом наступного коду?
C
#include> void> main()> > >int> a = 1, b = 0, c = 5;> >int> d = a && b> |
>
>
відповідь:
6>
Q4. Що буде виводом наступного коду?
C
#include> int> main()> {> >int> i = 1;> >if> (i++ && (i == 1))> >printf>(>'techcodeview.com
'>);> >else> >printf>(>'Coding
'>);> }> |
>
>
відповідь:
Coding>