Operadores lógicos C
Os operadores lógicos executam as operações logical-AND (&&
) e logical-OR (||
).
Sintaxe
logical-AND-expression
:
inclusive-OR-expression
logical-AND-expression
&&
inclusive-OR-expression
logical-OR-expression
:
logical-AND-expression
logical-OR-expression
||
logical-AND-expression
Comentários
Os operadores lógicos não executam as conversões aritméticas comuns. Em vez disso, eles avaliam cada operando em termos de sua equivalência a 0. O resultado de uma operação lógica é 0 ou 1. O tipo de resultado é int
.
Os operadores lógicos de C são descritos abaixo:
Operador | Descrição |
---|---|
&& |
O operador lógico AND produz o valor 1 se os dois operandos tiverem valores diferentes de zero. Se qualquer um dos operandos for igual a 0, o resultado será 0. Se o primeiro operando de uma operação AND lógica for igual a 0, o segundo operando não será avaliado. |
|| |
O operador OR lógico executa uma operação OR inclusiva em seus operandos. O resultado é 0 se os dois operandos tiverem valores 0. Se qualquer um dos operando tiver um valor diferente de zero, o resultado será 1. Se o primeiro operando de uma operação OR lógica tiver um valor diferente de 0, o segundo operando não será avaliado. |
Os operandos de expressões AND lógica e OR lógica são avaliados da esquerda para a direita. Se o valor do primeiro operando for suficiente para determinar o resultado da operação, o segundo operando não será avaliado. Esse efeito é conhecido como avaliação de “curto-circuito”. Há um ponto de sequência após o primeiro operando na expressão. Para obter mais informações, confira Pontos de sequência.
Exemplos
Os exemplos a seguir ilustram os operadores lógicos:
int w, x, y, z;
if ( x < y && y < z )
printf( "x is less than z\n" );
Neste exemplo, a função printf
é chamada para imprimir uma mensagem se x
for menor que y
e y
for menor que z
. Se x
for maior que y
, o segundo operando (y < z
) não será avaliado e nada será impresso. É outro caso de avaliação de curto-circuito que deve ser considerado ao escrever comparações lógicas. Caso contrário, poderá causar problemas se o código depender dos efeitos colaterais da avaliação do segundo operando.
printf( "%d" , (x == w || x == y || x == z) );
Nesse exemplo, se x
for igual a w
, y
ou z
, o segundo argumento para a função printf
é avaliado como verdadeiro e o valor 1 é impresso. Caso contrário, será avaliado como false, e o valor 0 será impresso. Assim que uma das condições for avaliada como true, a avaliação é encerrada.