conversão de short para byte deu como resultado -1

Olá

tentei fazer um cast de variáveis primitivas e pensei que a variável "b"
fosse receber o valor 127(imaginei que o resultado fosse truncado para o máximo que a variável byte pudesse suportar), mas ela recebeu o valor ‘-1’. Fiz a conversão do valor da variável short(32767) para binário e com o resultado obtido fiquei mais confuso ainda


public static void main(String[] args) {
final short s =32767;
byte b = (byte)s;
System.out.println(b);
}

O resultado foi " -1 "
não entendi

Converti a variável short, 32767, para binário e obtive o seguinte resultado: 111.1111.1111.1111

a variável short trabalha com inteiros de 16 bits, então, de acordo com o valor obtido, está faltando um bit. Eu imagino que esse bit que está faltando é para valores negativos

Não era para a variável byte receber o valor ‘-128’ ?

Ola!
Java trabalha com complemento de 2.
http://gec.di.uminho.pt/micei/ac/Repr_Numeros.pdf

short (8 bits) , no teu caso seria 1111.1111, sendo que o primeiro bit a esquerda representa o sinal (complemento de dois).
Para encontrar a resposta, tu deve inverter todos os bits que representa o valor 111.1111 (o primeiro bit NÃO representa valor) e inverter o mesmo 000.000, depois adicionar uma unidade 000.0001.
Então retorna o sinal 1000.0001, já que o primeiro digito representa o sinal e os demais os valor teremos: -1

Abraços…