sábado, 12 de abril de 2008

Precedência de operadores em Java

Precedência de opereadores em Java
Da maior para a menor

Operador Descrição
. [] ()
(tipo)
Máxima precedência: separador, indexação, parâmetros, conversão de tipo
+ - ~ ! ++ -- Operador unário: positivo, negativo, negação (inversão bit a bit), não (lógico), incremento, decremento
* / % Multiplicação, divisão e módulo (inteiros)
+ - Adição, subtração
<< >>
>>>
Translação (bit a bit) à esquerda, direita sinalizada, e direita não sinalizada (o bit de sinal será 0)
< <= >=
<
Operador relacional: menor, menor ou igual, maior ou igual, maior
== != Igualdade: igual, diferente
& Operador lógico e bit a bit
^ Ou exclusivo (xor) bit a bit
| Operador lógico ou bit a bit
&& Operador lógico e condicional
|| Operador lógico ou condicional
?: Condicional: if-then-else compacto
= op= Atribuição

Considere a expressão:

1 | 2 ^ 3 * 2 & 13 | 2

  1. A análise é feita da esquerda para a direita.
  2. O primeiro cálculo a ser executado é 3 * 2, que resulta em 6.
  3. Em seguida, o resultado anterior é comparado com o 13, uma operação & (E): 6 & 13, que resulta em 4.
  4. Agora é feita uma operação de ^ (Ou exclusivo) com o 2 (mais a esquerda) e o 4 da operação anterior. O resultado é 6.
  5. É executada, então, a operação | (Ou) mais a esquerda: 1 | 6 que resulta em 7.
  6. Por último, é executadada a operação de | (Ou): 7 | 2 que também resulta em 7.
A mesma expressão acima poderia ser escrita da seguinte forma:

((1 | (2 ^ ((3 * 2) & 13))) | 2)