Lógica do incrementador
Estou tentando me aprofundar com pós e pré-incrementadores, mas estou um pouco preso com a seguinte expressão:
public static void main(String[] args) {
int i = 0;
i = i+=(++i + (i+=2 + --i) - ++i);
// i = 0 + (++i + (i+=2 + --i) - ++i);
// i = 0 + (1 + (3 + 2) - 1);
// i = 0 + (6 - 1);
System.out.println(i); // Prints 0 instead of 5
}
Eu sei que estou perdendo a lógica em algum lugar, mas onde?
O que eu tentei:
Indo da esquerda para a direita (embora eu saiba que não é recomendado)Indo do suporte mais insidioso e a partir daí.Obrigado pela ajuda
PS: Os comentários são os detalhes do meu cálculo
EDIT 1
Tentei alterar o valor codificado da expressão de2
para outra coisa e o resultado sempre dá0
Veja este exemplo:
int i = 0;
i = i+=(++i + (i+=32500 + --i) - ++i);
System.out.println(i); // Prints 0
Essa expressão deve estar logicamente longe de0
mas de alguma forma ele imprime.
O mesmo acontece quando eu uso um negativo:
int i = 0;
i = i+=(++i + (i+=(-32650) + --i) - ++i);
System.out.println(i); // Prints 0
EDIT 2
Agora, mudei o valor dei
começar com :
int i = 1;
i = i+=(++i + (i+=2 + --i) - ++i);
System.out.println(i); // Prints 2
i = 2;
i = i+=(++i + (i+=10000 + --i) - ++i);
System.out.println(i); // Prints 4
i = 3;
i = i+=(++i + (i+=(-32650) + --i) - ++i);
System.out.println(i); // Prints 6
Dá o dobro dei
a qualquer momento, seja qual for o valor codificado.