Operadores relacionales lógicos¶
Sirven para evaluar expresiones compuestas de tipo lógico, cuya resultado, por tanto,
resultará cierto o falso, true
o false
.
La evaluación de las operaciones lógicas se realiza de izquierda a derecha y se interrumpe cuando se ha asegurado el resultado. Esto se conoce como propiedad de cortocircuito: si se puede concluir el valor lógico del resultado a partir de una evaluación parcial de la expresión, no se sigue evaluando la misma.
Operador |
Descripción |
---|---|
|
Y, devuelve |
|
O, devuelve |
|
NO, devuelve |
Las tablas de verdad asociadas a estos operadores son:
|
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---|---|
|
|
|
|
Los operadores de comparación y lógicos aparecen habitualmente de forma simultánea en las expresiones. Por ello, es conveniente conocer su orden de precedencia relativo:
Precedencia |
Operador |
Descripción |
Asociatividad |
---|---|---|---|
3 |
|
Negación lógica |
Izquierda a derecha |
9 |
|
Operadores de comparación |
Izquierda a derecha |
10 |
|
Operadores de igualdad |
Izquierda a derecha |
14 |
|
Conjunción lógica |
Izquierda a derecha |
15 |
|
Disyunción lógica |
Izquierda a derecha |
Insistimos en usar los paréntesis (...)
en caso de duda y/o
para mejorar la legibilidad.
Ejemplo 1
// Ejemplo que controla el rango permitido de valores de dos enteros
#include <iostream>
using namespace std;
int main()
{
int x, y;
cout << "Introduce dos números enteros positivos o 0. "
<< "Ambos no pueden valer simultáneamente 0.\n";
cout << "Introduce el primer número: ";
cin >> x;
cout << "Introduce el segundo número: ";
cin >> y;
if (x < 0 || y < 0)
cout << "Error. Los números introducidos no son ambos positivos.\n";
else if (x == 0 && y == 0)
cout << "Error. Los dos números son 0.\n";
else
cout << "Los números introducidos son validos.\n";
}
Edita, compila y ejecuta el código
Nótese la superior precedencia de los operadores de comparación
respecto a los lógicos &&
y ||
en expresiones como
x < 0 || y < 0
o x == 0 && y == 0
.
Por la propiedad de cortocircuito, en el ejempo anterior,
si el usuario introduce cualquier valor de x
negativo,
no se evaluará la expresión y < 0
.
Ejemplo 2
// Ejemplo que controla que un denominador no sea 0
#include <iostream>
using namespace std;
int main()
{
int x, y;
cout << "Introduce el numerador: ";
cin >> x;
cout << "Introduce el denominador: ";
cin >> y;
if (!y) // Equivalente a if (y == 0)
cout << "Error. No podemos dividir por 0.\n";
else
cout << "x/y= " << x/y << endl;
}
Edita, compila y ejecuta el código
Este ejemplo nos permite recordar que el operador división /
entre enteros genera un entero.