O documento discute operadores aritméticos em linguagens de programação, incluindo operadores unários, binários e de atribuição. Ele explica as regras de precedência e associação para avaliar expressões aritméticas e ressalta a importância da ordem correta de avaliação.
2. Conceitos gerais
As linguagens de programação dispõem de uma
variedade considerável de operadores aritméticos, e
como veremos posteriormente, a linguagem C e C++
têm um grade conjunto de operadores. Reportemo-nos
por agora aos mais comuns:
Os operadores aritméticos
Expressões aritméticos
Regras de precedência e associação
Regras de avaliação
Os operadores aritméticos estão implementados na
generalidade das linguagens de programa, ainda que
possam ter algumas ligeiras variações em alguns casos.
3. Os operadores podem subdividir-se em:
Operadores unários – por envolverem apenas
um operador
Operadores binários – por envolverem dois
operadores
Operadores de atribuição – por permitirem a
atribuição de um valor variável
Operadores especiais – existentes em
algumas linguagens como a C e a C++
4. Operadores unários (de sinal)
O operador de sinal não deve ser confundido com o operador de subtração e soma, pois
apesar de utilizarem o mesmo símbolo, são operadores diferentes.
Assim nos seguintes exemplos:
Supondo que m = 5
Então - m será igual - 5
Supondo a expressão j = 3 - - x
Está será interpretada como sendo j = 3 - (- x)
Operador Símbolo Exemplo Operação
Menos - -x Negação de x
Mais + +x Valor do operando
5. Operadores binários
Operador Símbolo Exemplo Operação
Multiplicação * x*y Multiplica x por y
Divisão / x/y Divide x por y
Soma + x+y Soma x a y
Subtração - x-y De x subtrai y
6. Operador de atribuição
Em relação aos operadores de atribuição, a generalidade
das linguagens implementam o operador igual, sendo de a
linguagem C e C++ implementam outros que veremos
posteriormente aquando do estudo de linguagens.
Operador Símbolo Exemplo Operação
Igual = x=y Atribuir o valor de y a x
7. Operador de sinal
Algumas linguagens dispõe ainda de um
operador ou função que permite calcular o resto
da divisão inteira de dois números, que
representaremos agora por resto (x, y).
Assim por exemplo o resto (9, 5) é 4.
8. Expressões aritméticas
Uma das capacidades mais importantes do
computador é a facilidade de manipulação de
expressões matemáticas mais ou menos
complexas, pelo que é de importância capital a
compreensão da forma como estas são tratadas.
Um programa depois de escrito passa, como
vimos, por um processo de compilação antes da
sua execução efetiva. No processo de compilação
são executadas, entre outras tarefas a
interpretação das declarações do programa e o
estabelecimento da sequência de operações a
serem executadas a propósito de cada um delas.
9. Expressões aritméticas
No caso das expressões aritméticas este processo é
executado tendo em atenção duas propriedades
fundamentais, a precedência e a associação. Estas
propriedades afetam a forma como os operadores são
aos operadores.
Precedência – estabelece que os operadores de maior
precedência tem os seus operandos atribuídos antes dos de
menor precedência, independentemente da ordem em que
surjam na expressão. Veja a tabela de procedências e
associação. Considere os seguintes exemplos:
2+3*4
3*4+2
Em ambos os casos a expressão é avaliada em 14. Isto acontece
porque primeiro é executada a multiplicação por ter maior
precedência e só depois a soma.
10. Expressões aritméticas
Associação – estabelece, no caso dos operadores
terem a mesma precedência, a ordem pela qual os
operadores serão agrupados, da esquerda para a
direita ou da direita para a esquerda. Esta propriedade
é estabelecida para cada operador. Veja a tabela de
precedência e associação que se segue. Considere o
seguinte exemplo:
a+b-c
Esta expressão será agrupada da esquerda para a direita,
de acordo com as suas propriedades de associação, pelo
que a ordem será primeiro a soma e depois a subtração.
11. Expressões aritméticas
São também utilizados os parênteses curvos para a
criação de expressões matemáticas, que impõem uma
determinada ordem de agrupamento. Considere os
seguintes exemplos:
(2-3)*4
2-(2*4)
No primeiro exemplo seria avaliado primeiro o parêntesis (2-3)
e só depois seria efetuada a multiplicação.
No segundo exemplo os parêntesis seriam desnecessários já
que a multiplicação tem precedência relativamente à
subtração. No entanto, é uma boa prática que, mesmo que
irrelevantes sejam utilizados os parêntesis mesmo nas
expressões mais simples.
12. Expressões aritméticas
No caso de expressões com parêntesis encaixados, a ordem de
agrupamento é do mais interior ao mais exterior, sendo aplicada
a propriedade da associatividade correspondente aos operadores
envolvidos.
Assim na seguinte expressão 1+((3+1)/(8-4)-5) a ordem de
agrupamento será:
1+((3+1)/(8-4)-5)
1+(4/(8-4)-5)
1+(4/4-5)
1+(1-5)
1+-4
-3
13. Regras de precedência e associação
Classe do operador
unários
multiplicativo
aditivo
relacionais
igualdade
AND
OR
atribuição
Operadores da
classe
- + !
* / Resto()
+ -
< <= > >=
= ¹
&&
||
=
Associatividade
direita / esquerda
Esquerda / direita
esquerda / direita
esquerda / direita
esquerda / direita
esquerda / direita
esquerda / direita
direita / esquerda
Precedência
maior
menor
14. Regras de avaliação
Como foi referido anteriormente, a avaliação é um processo
distinto, constituindo uma propriedade importante. Esta
refere-se à ordem pela qual o compilador avalia os
operadores. Os compiladores reorganizam as expressões
desde que esta não afete o resultado.
Chama-se a atenção para o fato de a divisão poder levantar
alguns problemas em alguns compiladores, especialmente
quanto estão envolvidos operandos de tipos diferentes ou
operandos negativos.
No caso dos operandos serem de tipo diferente devemos
forçar a conversão entre tipos.
Relativamente aos operandos negativos, estes devem ser
evitados.