Neste tutorial, você aprenderá sobre a precedência e associatividade de operadores com a ajuda de exemplos.
Precedência de operadores
A precedência dos operadores determina qual operador é executado primeiro se houver mais de um operador em uma expressão.
Vamos considerar um exemplo:
int x = 5 - 17* 6;
Em C, a precedência de *
é maior do que -
e =
. Portanto, 17 * 6
é avaliado primeiro. Em seguida, a expressão envolvendo -
é avaliada como a precedência de -
é maior do que a de =
.
Aqui está uma tabela de precedência de operadores de cima para baixo. A propriedade da associatividade será discutida em breve.
Tabela de precedência e associatividade de operadores
Operador | Significado do operador | Associatividade |
---|---|---|
() () -> . | Chamada funcional Referência de elemento de matriz Seleção indireta de membro Seleção direta de membro | Da esquerda para direita |
! ~ + - ++ - & * sizeof (tipo) | Negação lógica Bitwise (1's) complemento Unário mais Unário menos Incremento Decremento Desreferência (endereço) Referência de ponteiro Retorna o tamanho de um objeto Typecast (conversão) | Direita para esquerda |
* / % | Multiply Divide Remainder | Da esquerda para direita |
+ - | Binário mais (adição) Binário menos (subtração) | Da esquerda para direita |
<< >> | Shift esquerdo shift direito | Da esquerda para direita |
< <= > > = | Menor que menor ou igual maior que maior ou igual | Da esquerda para direita |
== ! = | Igual a Diferente de | Da esquerda para direita |
E | E bit a bit | Da esquerda para direita |
^ | OR exclusivo bit a bit | Da esquerda para direita |
| | OR bit a bit | Da esquerda para direita |
&& | E lógico | Da esquerda para direita |
|| | OR lógico | Da esquerda para direita |
?: | Operador Condicional | Direita para esquerda |
= * = / = % = + = - = & = = | = << = >> = | Atribuição simples Atribuir produto Atribuir quociente Atribuir resto Atribuir soma Atribuir diferença Atribuir bit a bit E Atribuir XOR bit a bit Atribuir bit a bit OU Atribuir deslocamento à esquerda Atribuir deslocamento à direita | Direita para esquerda |
, | Separador de expressões | Da esquerda para direita |
Associatividade de Operadores
A associatividade dos operadores determina a direção em que uma expressão é avaliada. Por exemplo,
b = a;
Aqui, o valor de a é atribuído a b, e não o contrário. É porque a associatividade do =
operador é da direita para a esquerda.
Além disso, se dois operadores com a mesma precedência (prioridade) estiverem presentes, a associatividade determina a direção em que eles são executados.
Vamos considerar um exemplo:
1 == 2! = 3
Aqui, os operadores ==
e !=
têm a mesma precedência. E, sua associatividade é da esquerda para a direita. Portanto, 1 == 2
é executado primeiro.
A expressão acima é equivalente a:
(1 == 2)! = 3
Nota: Se uma instrução tiver vários operadores, você pode usar parênteses ()
para tornar o código mais legível.