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é!

Sobre Fábio dos Reis (1365 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*