Oltre alle risposte qui, posso spiegare come funziona il complemento a due.
Un byte è composto da 8 bit.
00000000 significa 0
11111111 significa 255
Tuttavia, se solo diciamo così, non possiamo distinguere se il numero positivo o negativo è. Per questo motivo, il bit sul lato sinistro ci fornisce questa informazione. Se il bit sul lato sinistro è 0, puoi iniziare ad aggiungere il valore di altri bit nella parte superiore dello zero. Se il bit è 1, dovresti iniziare ad aggiungere nella parte superiore di -128. Perché il bit sul lato sinistro è due alla potenza di sette.
Esempi;
In questi esempi, il bit sul lato sinistro è 1, significa che stiamo aggiungendo i valori di altri bit nella parte superiore di -128.
10000000 = -128 (-128 + 0)
10000001 = -127 (-128 + 1)
10000011 = -125 (-128 + 3)
10000111 = -121 (-128 + 7)
Stesse byte, ma questa volta, il bit a sinistra è 0. ciò significa, stiamo iniziando aggiungere sulla parte superiore del 0.
00000000 = 0 (0 + 0)
00000001 = 1 (0 + 1)
00000011 = 3 (0 + 3)
00000111 = 7 (0 + 7)
Se siamo ok fino ad ora, la risposta alla tua domanda, il numero più piccolo possibile con 8 bit con questa regola è;
10000000 = -128
il maggior numero possibile
011111111 = 127
Questo è il motivo per cui, l'intervallo è compreso tra -128 e 127.
fonte
2017-03-06 10:43:34
[di due si completano] (http: //en.wikipedia.org/wiki/Two's_complement) –
È simile per gli altri tipi interi 'short',' int' e 'long'. – starblue
Una domanda migliore è 'perché il tipo di byte java non è un intervallo di 0..255'? In effetti molti fanno questa domanda, nella maggior parte delle lingue il 'byte' non è firmato, ma anche java' byte' è firmato, e io (e molti altri) credo che sia stato un cattivo progetto rimasto in Java dal primo giorno. Ci sono problemi quando si lavora con JNI, e credetemi quando date un nome a 'byte' che volete 0..255! –