2016-01-29 13 views
7

In base al fatto che un tipo byte in java è un numero intero a 8 bit two's complement, perché il secondo modo di dichiarare un byte non funziona?-128 come valore letterale binario in Java

byte ok = -128; 
byte notok = 0b10000000; 

mia comprensione è che 1000000 dovrebbe essere -128 ma java indica la variabile notok sopra dovrebbe essere un int e non un byte

risposta

7

0b10000000 è un int letterale (= 0b00000000000000000000000010000000), che equivale a +128. byte contiene 8 bit e non può rappresentare +128. Tuttavia, è possibile raggiungere questo obiettivo nel modo seguente:

byte notok = (byte) 0b10000000; 
+0

Intendevi che il byte contiene 8 bit? – Uli

+0

@Mickey No, '+ 128'. –

+0

@Uli Sì. Corretto :) –

4

In realtà, come detto da Eng Fouad, 0b10000000 è un intero letterale. I valori letterali intere creano un valore int, la cui dimensione in Java è pari a 32 bit. Il tipo di dati byte è un numero intero a complemento a due con segno di 8 bit.

Quindi assegnare il valore intero letterale a un tipo di byte non funzionerebbe. Per creare una conversione tra due tipi incompatibili, è necessario utilizzare un cast.

b = (byte)0b10000000;  // (This is narrowing conversion) 

Inoltre, la rappresentazione firmato 2 complemento di -128 è 110000000. Tuttavia, l'1 dell'MSB può essere scartato (rappresenta il bit del segno negativo) e quindi è accettabile come rappresentazione del complemento a 2 di -128.

Problemi correlati