• Compra una licencia de Windows 10/11 (10€) u Office (18€) al mejor precio u Office al mejor precio. Entra en este post con las ofertas
  • ¡Bienvenid@! Recuerda que para comentar en el foro de El Chapuzas Informático necesitas registrar tu cuenta, tardarás menos de 2 minutos y te dará valiosa información además de ayudarte en lo que necesites o pasar un rato agradable con nosotros.

AYUDA Duda - Precedencia Operadores Java

FuRRRaira

Nuevo
Registrado
13 Feb 2019
Mensajes
33
Puntos
8
¡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:
 
Edito:
Olvida lo que he dicho, estoy en la parra xd.
 
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:
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