In Java, int
s vengono archiviati utilizzando una complemento a 2 a 32 bit e short
s con una rappresentazione del complemento a 16 bit 2
Questo significa che un int
con il valore 17 conterrà il bitpattern 00000000 00000000 000000000 00010001
e con il valore 100000 conterrà il bitpattern 00000000 00000001 10000110 10100000
.
Quando converti questi numeri in short
, devi inserirli in 16 bit. Questo viene fatto mantenendo i 16 bit inferiori (più a destra) e gettando via il resto, in quanto conserva tutti i valori che possono essere rappresentati in un short
.
Il modello per 17 diventa 00000000 00010001
, che è ancora il numero 17.
Il modello per 100000 diventa 10000110 10100000
. Qui abbiamo perso un bit che era effettivamente necessario per la rappresentazione del numero, quindi il valore rappresentato dai bit rimanenti è diverso. Secondo la rappresentazione di 2'complement a 16 bit, il bitpattern 10000110 10100000
rappresenta il numero -31072.