ViniGodoy wrote:Ué, um byte vai de -128 até 127. E tem exatamente 8 bits.
Vamos pegar o primeiro número que vc escreveu, em binário.
Os 16 bits dele poderiam ser escritos assim:
1234 -> 00000100 11010010
(O inteiro tem 32 bits, mas seriam só mais 16 zeros na frente).
Agora retire os 8 bits menos significativos, que é a capacidade de um byte:
1234 -> 00000100
11010010
Isso é o valor binário que foi gravado após a conversão. Agora, vamos ver como o Java vai fazer para entende-lo.
Como a variável do tipo byte tem sinal, o primeiro bit (destacado em negrito) representa o sinal de negativo:
11010010
Os demais bits, são o número mesmo. O Java usa
complemento de 2, portanto, para descobrir o valor do resto dos bits (que não ficaram em negrito), basta inverte-los, converter para decimal e somar 1. Essa inversão e soma só é necessária para números negativos.
1010010 invertidos são 0101101. O valor 0101101 em decimal é 45. 45+1=46.
Logo, o número 1234, truncado para um único bit é -46. Aplique esse processo para o resto dos números para entender a conversão.
Note que houve mesmo perda de informação. E o resto foi interpretado como podia.
O número final realmente perde o sentido.