C Operadors lògics
Els operadors lògics en C s'utilitzen per combinar múltiples condicions/restriccions. Els operadors lògics retornen 0 o 1, depèn de si el resultat de l'expressió és cert o fals. A la programació C per a la presa de decisions, utilitzem operadors lògics.
Tenim 3 operadors lògics en llenguatge C:
- AND lògic ( && ) OR lògic ( || ) NO lògic ( ! )
Tipus d'operadors lògics
1. Operador AND lògic ( && )
Si els dos operands són diferents de zero, la condició esdevé certa. En cas contrari, el resultat té un valor de 0. El tipus de retorn del resultat és int. A continuació es mostra la taula de veritat per a l'operador AND lògic.
| X | I | X && Y |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 0 |
Sintaxi
(operand_1 && operand_2)
Exemple
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;> }> |
Sortida
Both values are greater than 0
2. Operador OR lògic ( || )
La condició esdevé certa si qualsevol d'elles és diferent de zero. En cas contrari, retorna fals, és a dir, 0 com a valor. A continuació es mostra la taula de veritat per a l'operador OR lògic.
| X | I | X || I |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
Sintaxi
(operand_1 || operand_2)
Exemple
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;> }> |
Sortida
Any one of the given value is greater than 0
3. Operador NO lògic ( ! )
Si la condició és certa, l'operador lògic NOT la farà falsa i viceversa. A continuació es mostra la taula de veritat per a l'operador lògic NOT.
| X | !X |
|---|---|
| 0 | 1 |
| 1 | 0 |
Sintaxi
! (operand_1 && operand_2)
Exemple
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;> }> |
Operadors lògics de curtcircuit
Quan el resultat es pot determinar avaluant l'expressió lògica anterior sense avaluar els operands addicionals, es coneix com a curtcircuit.
El curtcircuit es pot veure a l'equació que té més d'un operador lògic. Poden I, O, o tots dos.
1. Curtcircuit en operador I lògic
L'operador AND lògic retorna cert si i només si tots els operands s'avaluen com a cert. Si el primer operand és fals, no s'avaluaran els altres operands. Això es deu al fet que fins i tot si els operands addicionals s'avaluen com a vertader, tota la condició tornarà a ser falsa.
Exemple
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;> }> |
Sortida
Both conditions are satisfied. Conditions not satisfied.
2. Curtcircuit en operador OR lògic
L'operador OR retorna cert si almenys un operand s'avalua com a cert. Si el primer operand és cert, no s'avaluaran els altres operands. Això es deu al fet que, fins i tot si els operands addicionals avaluen com a fals, tota la condició tornarà a ser cert.
Exemple
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;> }> |
Sortida
At least one condition is satisfied. Conditions not satisfied.
Preguntes freqüents sobre operadors lògics
Q1. Quina és la precedència dels operadors lògics en la programació?
Resposta:
La prioritat dels operadors lògics és: NOT, AND, OR. Tanmateix, sempre es recomana utilitzar parèntesis per fer explícit l'ordre d'avaluació i evitar confusions.
P2. Els operadors lògics es poden encadenar?
Resposta:
Sí, els operadors lògics es poden encadenar per crear condicions complexes. Per exemple, podem combinar diversos operadors AND lògics (&&) o OR lògics (||) en una única expressió per avaluar diverses condicions simultàniament.
P3. Quina serà la sortida del codi següent?
C
#include> void> main()> > > int> a = 1, b = 0, c = 5;> > int> d = a && b> |
Resposta:
6
P4. Quina serà la sortida del codi següent?
C
#include> int> main()> {> > int> i = 1;> > if> (i++ && (i == 1))> > printf> (> 'techcodeview.com
'> );> > else> > printf> (> 'Coding
'> );> }> |
Resposta:
Coding