¿Cuál es el valor de x después de este código? Int x = 4; int y = 9; x = (y% x! = 0)? Y / x: y;

Como el código

Int x = 4; int y = 9; x = (y% x! = 0)? Y / x: y;

es posible que no se compile (según el idioma), porque Y e y son variables diferentes si el idioma distingue entre mayúsculas y minúsculas y aún no se ha declarado. (Int e int también son de diferentes tipos).

Deje que se resuelva este problema de compilación, lo que produce

int x = 4; int y = 9; x = (y% x! = 0)? y / x: y;

Después de las dos primeras líneas, x es igual a 4 e y es igual a 9. Entonces, lo primero que se evaluará es la expresión entre paréntesis, donde el operador% tiene mayor prioridad que el operador! =. (Una posible razón para esto es permitir que cosas como a + b == c * d se analicen como podría esperarse: calcule ambos lados y luego compare).

Entonces, y% x es igual a 9% 4, que es igual a 1, y 1! = 0 es verdadero (1 no es igual a 0). Entonces, la expresión se convierte en:

x = verdadero? y / x: y;

El operador / tiene mayor precedencia que el operador?: Y el operador =, por lo que y / x se evalúa como 9/4, que es igual a 2, ya que el signo / es una división entera, que deja:

x = verdadero? 2: y;

o (ya que y es igual a 9)

x = verdadero? 2: 9;

El operador?: Tiene mayor precedencia que el operador = (asignación), y verdadero? 2: 9 evalúa a 2 (y falso? 2: 9 habría evaluado a 9).

Entonces 2 se asigna a x.