Casting int para short

Bom dia, gostaria de saber se alguém sabe explixar porque o resultado deste casting dá : 20678

short y = (short)1921222;

Muito obrigado a todos

O tipo primitivo int tem 4 bytes ou 32 bits.
Com ele você consegue representar os números de -2147483648 até 2147483647.

O tipo primitivo short tem 2 bytes ou 16 bits.
Com ele você consegue representar os números de -32768 até 32767.

Veja quais são os 4 bytes que compõe o número int 1921222:

00000000 00011101 01010000 11000110  (int)
 byte 4   byte 3   byte 2   byte 1

Quando você faz um cast de int pra short, você está perdendo o byte 3 e o byte 4 do número int, ficando somente com o 2 bytes abaixo:

-------- -------- 01010000 11000110  (short)
                   byte 2   byte 1

Se você converter 0101000011000110 para decimal, vai obter o número 20678.
:slight_smile:

2 curtidas

Nao acredito … você é uma raridade, poucos tem esse conhecimento.

Vou estudar a resposta muito obrigado

1 curtida