2012-03-11 11 views

Respuesta

16

Lo que está haciendo es combinar modelos de conversión con operadores unarios.

Así que vamos a ver:

En primer lugar, usted tiene el valor -1, lo que le convierte en el tipo long.

A continuación, realice la operación única +, que no cambia el valor, por lo que todavía tiene (long) -1.

Luego, lo convierte en int, por lo que ahora tenemos int -1. Luego, usa el operador único -, entonces tenemos -(-1), que es 1.

Luego lo moldeas a char, entonces tenemos char 1. Luego, usa el operador único +, por lo que todavía tiene 1.

Finalmente, el valor se envía a byte, por lo que tiene byte 1. Y luego, una vez más (implícitamente) se envía a int.

5

Las diversas partes (<type>) se acaba de conversión entre diferentes tipos. Así que lo que sucede es, la lectura desde la derecha, 1 ->-1 ->(long)-1 ->(int)-1 ->-(int)-1 = 1 ->(char)1) ->(byte)1 que luego se convierte en una int durante la asignación. En ningún momento el tipo de conversión produce un cambio efectivo del valor, por lo que toda la primera línea es equivalente a int i = 1;.

2

Esto va de derecha a izquierda. -1 se lanza a largo. Luego se aplica el prefijo + (que no tiene ningún efecto), y se lanza a int. Luego, se aplica - (cambiándolo a 1) y se convierte en char. Por último, se aplica el prefijo + (que aún no tiene ningún efecto) y se convierte en byte.

0

permite agregar un paréntesis:

int i = ((byte) + ((char) - ((int) + ((long) (- 1))))); 
System.out.println(i); 

básicamente esto es sólo una serie de moldes y operadores unitarios (+ no hace nada, - niega)

el flujo del programa completo se encuentra en luiscubal 's respuesta

Cuestiones relacionadas