Operadores lógicos de C

Los operadores lógicos realizan operaciones logical-AND (&&) y logical-OR (||).

Sintaxis

logical-AND-expression:
inclusive-OR-expression
logical-AND-expression && inclusive-OR-expression

logical-OR-expression:
logical-AND-expression
logical-OR-expression || logical-AND-expression

Observaciones

Los operadores lógicos no realizan las conversiones aritméticas habituales. En su lugar, evalúan cada operando en términos de su equivalencia a 0. El resultado de una operación lógica es 0 o 1. El tipo del resultado es int.

Los operadores lógicos de C se describen a continuación:

Operador Descripción
&& El operador logical-AND genera el valor 1 si ambos operandos tienen valores distintos de cero. Si cualquiera de los operandos es igual a 0, el resultado es 0. Si el primer operando de una operación logical-AND es igual a 0, no se evalúa el segundo operando.
|| El operador logical-OR realiza una operación OR inclusiva en sus operandos. El resultado es 0 si ambos operandos tienen 0 valores. Si alguno de los operandos tiene un valor distinto de cero, el resultado es 1. Si el primer operando de una operación lógico-OR tiene un valor distinto de cero, el segundo operando no se evalúa.

Los operandos de las expresiones logical-AND y logical-OR se evalúan de izquierda a derecha. Si el valor del primer operando es suficiente para determinar el resultado de la operación, no se evalúa el segundo operando. Este efecto se conoce como evaluación de cortocircuito. Hay un punto de secuencia después del primer operando de la expresión. Para obtener más información, vea Puntos de secuencia.

Ejemplos

En los ejemplos siguientes se muestran los operadores lógicos:

int w, x, y, z;

if ( x < y && y < z )
    printf( "x is less than z\n" );

En este ejemplo, se llama a la printf función para imprimir un mensaje si x es menor que y y y es menor que z. Si x es mayor que y, el segundo operando (y < z) no se evalúa y no se imprime nada. Es otro caso de evaluación de cortocircuito que se debe tener en cuenta al escribir comparaciones lógicas. De lo contrario, podría causar problemas si el código se basa en los efectos secundarios de evaluar el segundo operando.

printf( "%d" , (x == w || x == y || x == z) );

En este ejemplo, si x es igual a w, yo z, el segundo argumento de la printf función se evalúa como true y se imprime el valor 1. De lo contrario, se evalúa como false y se imprime el valor 0. En cuanto una de las condiciones se evalúa como verdadera, la evaluación deja de funcionar.

Consulte también