AYUDA Duda - Precedencia Operadores Java

FuRRRaira

Chapuzas Jr
Registrado
13 Feb 2019
Mensajes
28
Puntos
0
¡Hola! Buenas tardes,
Estoy empezando con Java y al tratar de realizar una operación concreta me surge una gran incertidumbre respecto a la prioridad de operadores.
He analizado las siguientes dos operaciones una y otra vez, y según la precedencia de operadores yo creía que obtendría el mismo resultado en ambos casos (1 y 1).

System.out.println(1 + 2 - 3 * 4 / 5);
System.out.println(1 + 2 - (3 * (4 / 5)));

Pero no es así, la segunda operación da como resultado un 3 impreso en la salida. Porfavor, ¿alguien puede decirme por qué ocurre esto?:confused:
 

Sampi

Master Chapuzas
Registrado
22 Abr 2015
Mensajes
1.210
Puntos
0
Edito:
Olvida lo que he dicho, estoy en la parra xd.
 

Sampi

Master Chapuzas
Registrado
22 Abr 2015
Mensajes
1.210
Puntos
0
Al meter las operaciones en paréntesis, la expresión ejecuta primero lo que hay entre paréntesis, por eso:
Primero hace 4/5 que es 0.8, pero como estás usando enteros, es un 0.
En el siguiente paso multiplica 3 por el resultado anterior, 3 * 0 es igual a 0.
Y por último 1 + 3 + 0 que es igual a 3.

En la primera, al no haber paréntesis, el paso a entero se hace al final, por lo que mantienes el margen de los decimales.

Además tienes que tener en cuenta el orden de los operadores cuando hay paréntesis.
Si hay paréntesis se hace primero lo que hay dentro.
Si no, * y / tienen el mismo orden de preferencia, por lo que se ejecutan de izquierda a derecha.
 
Última edición:

FuRRRaira

Chapuzas Jr
Registrado
13 Feb 2019
Mensajes
28
Puntos
0
Oh, ya veo que lo que hace java y otros lenguajes cuando se utilizan tipos enteros es truncar al valor más bajo el resultado de cada "suboperación" dentro de una misma expresión... menos mal, no tenía ni idea de lo que estaba ocurriendo. Muchas gracias Sampi tu respuesta me ha sido de gran ayuda :D
También he comprobado que con valores tipo float las operaciones respetan los decimales, por lo que obtengo el mismo resultado en las dos operaciones :p

Todo claro! saludos, y gracias de nuevo :)
 
Arriba