2012-07-23 9 views
5

Espressione di condizione come quelle che interessano & & e ||, valuteranno sempre a 0 o 1? O per condizioni vere, sono possibili numeri diversi da 1? Sto chiedendo perché voglio assegnare una variabile come questa.Le espressioni condizionali valgono sempre 0 o 1 in C?

int a = cond1 && cond2; 

Mi chiedevo se avrei dovuto fare quanto segue invece.

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

in realtà, qual è il tuo requisito principale? perché stai per assegnare queste variabili? –

risposta

14

Gli operatori logici (&&, || e !) tutto restituiscono sia 1 o 0.

C99 §6.5.13/3:

L'operatore deve cedere &&1 se entrambi gli operandi confronta disuguale 0; altrimenti, produce 0. Il risultato ha tipo int.

C99 §6.5.14/3:

L'operatore deve cedere ||1 se uno dei suoi operandi confronta disuguale 0; altrimenti, produce 0. Il risultato ha tipo int.

C99 6.5.3.3/5:

Il risultato dell'operatore negazione logica ! è 0 se il valore del suo operando confronta disuguale 0, 1 se il valore del suo operando confronta uguale 0. Il risultato ha tipo int. L'espressione! E è equivalente a (0 == E).

+0

(Non ho una copia di C11 a portata di mano, ma sono sicuro che le specifiche degli operatori logici non sono cambiate.) –

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. 

Gli operandi di espressioni logiche-AND e OR logico vengono valutate da sinistra a destra. Se il valore del primo operando è sufficiente per determinare il risultato dell'operazione, il secondo operando non viene valutato. Questo è chiamato "valutazione di cortocircuito". C'è un punto di sequenza dopo il primo operando.

Grazie, :)

+2

E questo non risponde alla domanda. –