Associatividade e Precedência de Operadores em C++
Associatividade e Precedência de Operadores em C++
A linguagem C++ avalia expressões aritméticas em uma sequência precisa, que é determinada pelas regras de precedência matemáticas e associatividade de operadores.
A tabela a seguir mostra os operadores em ordem decrescente de precedência:
Operadores | Tipo | Associatividade |
( ) | Parênteses | De dentro para fora |
* / % | Multiplicativo | Da esquerda para a direita |
+ – | Aditivo | Da esquerda para a direita |
<< >> | Inserção / Extração | Da esquerda para a direita |
< <= > >= | Relacional | Da esquerda para a direita |
== != | Igualdade | Da esquerda para a direita |
= | Atribuição | Da direita para a esquerda |
Os parênteses ( ) podem ser usados para agrupar expressões e alterar a ordem de execução (precedência) dos operadores em uma expressão.
Desta forma, uma expressão como:
x = 5 * 2 + 3
a qual resulta em 13, é avaliada de forma diferente da expressão
x = 5 * (2 + 3)
que resulta no valor 25, pois neste segundo caso os parênteses alteram a ordem de execução dos operadores, efetuando a soma primeiro e depois a multiplicação com o resultado desta soma.
Associatividade em C++
A associatividade diz respeito à forma como a expressão é avaliada. Por exemplo, a expressão a + b + c é avaliada como se tivesse sido escrita (a + b) + c, pois os operadores aditivos (e aritméticos em geral) são associativos da esquerda para a direita – então, os operandos da esquerda são avaliados primeiro.
Já o operador de atribuição = é associativo da direita para a esquerda, de modo que a expressão a = b = 10 é avaliada como se tivesse sido escrita a = (b = 10), ou seja, como se fossem duas instruções separadas e sequenciais sendo executadas:
b = 10; a = b;
Primeiramente o valor 10 é atribuído à variável b, e então o conteúdo da variável b é atribuído à variável a.
No exemplo a seguir combinamos regras de precedência com associatividade:
b = 10; a = 3; c = a * 3 + (b + 10) / 2
No exemplo, o ramos do lado direito será avaliado primeiro, e depois seu resultado atribuído à variável c (associatividade da atribuição). Porém, o ramo direito é em si uma expressão aritmética, e será avaliado da esquerda para a direita, respeitando a ordem de precedência dos operadores, exceto quando houver parênteses alterando-a.
Assim, teremos:
- o valor da variável a é multiplicado por 3, resultando em 9
- o valor de b somado a 10, resultando em 20 (parênteses em ação aqui)
- o resultado anterior é dividido por 2, resultando em 10 (ordem de precedência de operadores em c++)
- o resultado da multiplicação de a com as operações sobre b é a soma desses valores, resultando em 19
- e então o resultado da expressão é atribuído à variável c.
É isso aí! Nas próximas lições vamos explorar mais a fundo os diversos tipos de operadores disponíveis em linguagem C++.
Até!
Escreva um comentário