2012-07-23 14 views
5

Expresión de condición como las relacionadas con & & y ||, ¿siempre evalúan a 0 o 1? O para una condición verdadera, ¿son posibles números distintos a 1? Pregunto porque quiero asignar una variable como esta.¿Las expresiones de condición siempre evalúan a 0 o 1 en C?

int a = cond1 && cond2; 

Me preguntaba si debería hacer lo siguiente en su lugar.

int a = (cond1 && cond2)? 1:0; 
+0

realidad, ¿cuál es su requisito importante? ¿Por qué vas a asignar estas variables? –

Respuesta

14

Los operadores lógicos (&&, ||, y !) todos evalúan a cualquiera 1 o 0.

C99 §6.5.13/3:

El operador && deberá producir 1 si ambos de sus operandos comparar desigual a 0; de lo contrario, produce 0. El resultado tiene el tipo int.

C99 §6.5.14/3:

El operador || deberá producir 1 si cualquiera de sus operandos comparar desigual a 0; de lo contrario, produce 0. El resultado tiene el tipo int.

C99 6.5.3.3/5:

El resultado del operador negación lógica ! es 0 si el valor de su operando compara desigual a 0, 1 si el valor de su operando compara igual a 0. El resultado tiene el tipo int. La expresión! E es equivalente a (0 == E).

+0

(No tengo una copia de C11 a mano, pero estoy seguro de que la especificación de los operadores lógicos no ha cambiado). –

0
'&&' 
    The logical-AND operator produces the value 1 if both operands have nonzero 
    values. If either operand is equal to 0, the result is 0. If the first operand of a 
    logical-AND operation is equal to 0, the second operand is not evaluated. 

'||' 
     The logical-OR operator performs an inclusive-OR operation on its operands. 
    The result is 0 if both operands have 0 values. If either operand has a nonzero 
    value, the result is 1. If the first operand of a logical-OR operation has a nonzero 
    value, the second operand is not evaluated. 

Los operandos de expresiones lógicas-Y y lógicos-OR se evalúan de izquierda a derecha. Si el valor del primer operando es suficiente para determinar el resultado de la operación, el segundo operando no se evalúa. Esto se llama "evaluación de cortocircuito". Hay un punto de secuencia después del primer operando.

Gracias :),

+2

Y esto no responde la pregunta. –