Toda expressão lógica (= expressão booleana) em C tem valor 0 ou 1. Por exemplo, o valor da expressão
tt == 3
é 1 se tt vale 3 e é 0 se tt não vale 3. O valor da expressão
rand( ) <= RAND_MAX / 2
é 1 se a função rand devolver um número menor ou igual a RAND_MAX/2 e é 0 se a função rand devolver um número maior que RAND_MAX/2.
Em C, o valor de toda expressão booleana é calculado da esquerda para a direita. Se o valor de uma expressão longa fica definido antes que as partes finais da expressão tenham sido calculadas, o cálculo é interrompido e as partes finais da expressão não são sequer examinadas. Essa regra (conhecida como minimal evaluation ou short-circuit evaluation) é usada em C para evitar o cálculo de subexpressões de valor indefinido.
No exemplo abaixo, embora as duas expressões pareçam equivalentes, a primeira está correta enquanto a segunda pode estar incorreta se v[j] não estiver bem definido quando j ≥ n.
if (m < n && v[m] < x) ... if (v[m] < x && m < n) ...