Conversao de tipos

Galera, vejam este codigo:

public class teste {

public static void main (String[] args){
	 short a=128;
	 byte valor=(byte)a;
System.out.println(valor);
}

}

O resultado que é retornado é -128.
Notem que atribui 128 ao tipo short, pois se eu tivesse atribuido 127 não teria ocorrido mudança.

Alguém poderia me dizer porque isto ocorre?

pq um byte vai de -128 a 127
e quando voce passa do valor, ele começa a contar em loop.

isso é por causa dos bits q cada tipo primitivo do java suporta…
se voce olhar a saida em numeros binários, vai entender…

Isso é meio chato, mas vamos lá:

representação de 128 em 16 bits (short) = 0000000010000000
representação de 128 em 8 bits (byte) = 10000000

O bit da extrema esquerda indica o sinal: 1= negativo

Para saber o valor de um número negativo vc deve inverter todos os bits: 01111111, depois adicione 1 = 10000000

Resumindo: -128[/b]

Valeu galera!!

Muito show a explicação…