Digitare Casting in Java

4

Qualcuno potrebbe spiegare perché breve (100000) è -31072 come detto in p.48 di java-notes . L'articolo dice che " il valore -31072 si ottiene prendendo il 4 byte int 100000 e buttando via due di questi byte per ottenere un corto ".

Il codice dell'articolo correlato alla domanda è:

int A;
short B;
A = 17;
B = (short)A;
    
posta justin 29.11.2014 - 06:10
fonte

1 risposta

7

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.

    
risposta data 29.11.2014 - 07:40
fonte

Leggi altre domande sui tag