Lógica de incremento
Estoy tratando de profundizar con post y pre incrementos, pero estoy un poco atascado con la siguiente expresión:
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
}
Sé que me falta la lógica en algún lugar, pero ¿dónde?
Lo que probé:
Ir de izquierda a derecha (aunque sé que no es recomendable)Yendo desde el soporte interior y comenzando desde allí.Gracias por la ayuda
PD: Los comentarios son los detalles de mi cálculo.
EDITAR 1
Traté de cambiar el valor codificado de la expresión de2
a otra cosa y el resultado siempre da0
Mira este ejemplo:
int i = 0;
i = i+=(++i + (i+=32500 + --i) - ++i);
System.out.println(i); // Prints 0
Esta expresión no debería estar lógicamente cerca0
pero de alguna manera lo imprime.
Lo mismo sucede cuando uso un negativo:
int i = 0;
i = i+=(++i + (i+=(-32650) + --i) - ++i);
System.out.println(i); // Prints 0
EDITAR 2
Ahora, cambié el valor dei
para empezar :
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
Da el doble dei
cada vez, sea cual sea el valor codificado.