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.

 

A ordem dos fatores em uma expressão booleana

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) ...

 


URL of this site: www.ime.usp.br/~pf/algoritmos/