Trabalhando com Operadores Aritméticos Binários
Começaremos nossa discussão com operadores binários, de longe, os operadores mais comuns na linguagem Java. Eles podem ser usados para executar operações matemáticas em variáveis, criar expressões lógicas, bem como executar atribuições básicas de variáveis. Operadores binários são comumente combinados em expressões complexas com mais de duas variáveis; portanto, a precedência do operador é muito importante na avaliação de expressões.
Operadores aritméticos
Operadores aritméticos são freqüentemente encontrados no início da matemática e incluem adição (+), subtração (-), multiplicação (*), divisão (/) e módulo (%). Eles também incluem os operadores unários, ++ e --, embora os cobrimos mais adiante neste capítulo. Como você deve ter notado na Tabela 2.1, os operadores multiplicativos (*, /,%) têm uma ordem de precedência maior que os operadores aditivos (+, -). Isso significa que quando você vê uma expressão como esta:
int x = 2 * 5 + 3 * 4 - 8;
você primeiro avalia o 2 * 5 e 3 * 4, o que reduz a expressão para o seguinte:
int x = 10 + 12 - 8;
Em seguida, avalie os termos restantes da esquerda para a direita, resultando em um valor de x igual a 14. Tenha certeza de que entende por que o resultado é 14, pois é provável que você veja esse tipo de pergunta de precedência de operador no exame.
Note que dissemos “Exceto com parênteses ...” antes da Tabela 2.1. Isso porque você pode alterar a ordem de operação explicitamente envolvendo parênteses nas seções que deseja avaliar primeiro. Compare o exemplo anterior com o seguinte contendo os mesmos valores e operadores, na mesma ordem, mas com dois conjuntos de parênteses:
int x = 2 * ((5 + 3) * 4 – 8);
Desta vez você avaliaria o operador de adição 5 + 3, o que reduz a expressão para o seguinte:
int x = 2 * (8 * 4 – 8);
Você pode reduzir ainda mais essa expressão multiplicando os dois primeiros valores entre parênteses:
int x = 2 * (32 – 8);
Em seguida, você subtrai os valores entre parênteses antes de aplicar os termos fora dos parênteses:
int x = 2 * 24;
Finalmente, você multiplicaria o resultado por 2, resultando em um valor de 48 para x.
Todos os operadores aritméticos podem ser aplicados a quaisquer primitivos Java, exceto booleano e String. Além disso, somente os operadores de adição + e += podem ser aplicados aos valores de String, o que resulta na concatenação de String.
Embora tenhamos certeza de que você já tenha visto a maioria dos operadores aritméticos, o operador de módulo, %, pode ser novo para você. O módulo, ou operador de resto, é simplesmente o resto de uma divisão, quando dois números são divididos. Por exemplo, 9 dividido por 3 divide uniformemente e não tem resto; portanto, o restante, ou 9 % 3, é 0. Por outro lado, 11 dividido por 3 não divide uniformemente; portanto, o restante, ou 11 % 3, é 2.
Certifique-se de entender a diferença entre a divisão aritmética e o módulo. Para valores inteiros, a divisão resulta no valor mínimo do inteiro mais próximo que cumpre a operação, enquanto o módulo é o valor restante. Os exemplos a seguir ilustram essa distinção:
System.out.print(9 / 3); // Outputs 3
System.out.print(9 % 3); // Outputs 0
System.out.print(10 / 3); // Outputs 3
System.out.print(10 % 3); // Outputs 1
System.out.print(11 / 3); // Outputs 3
System.out.print(11 % 3); // Outputs 2
System.out.print(12 / 3); // Outputs 4
System.out.print(12 % 3); // Outputs 0
Note que os resultados da divisão só aumentam quando o valor no lado esquerdo passa de 9 para 12, enquanto o valor do resto do módulo aumenta em 1 cada vez que o lado esquerdo é aumentado até que ele seja arredondado para zero. Para um determinado divisor y, que é 3 nesses exemplos, a operação de módulo resulta em um valor entre 0 e (y - 1) para dividendos positivos. Isso significa que o resultado de uma operação de módulo é sempre 0, 1 ou 2.
A operação de módulo não é limitada a valores inteiros positivos em Java e também pode ser aplicada a inteiros negativos e inteiros de ponto flutuante. Para um dado divisor y e dividendo negativo, o valor de módulo resultante é entre ( -y + 1 ) e 0. No entanto, para o exame OCA, você não precisa ter o módulo de um número inteiro negativo ou um número de ponto flutuante.