Además de las respuestas aquí, puedo explicar cómo funcionan los dos complementos.
Un byte consta de 8 bits.
00000000 significa 0
11111111 significa 255
Sin embargo, si nos limitamos a decir así, no podemos diferenciar entre si el número es positivo o negativo. Por esta razón, el bit en el lado izquierdo nos da esta información. Si el bit en el lado izquierdo es 0, puede comenzar a agregar el valor de otros bits en la parte superior de cero. Si el bit es 1, deberías comenzar a agregar en la parte superior de -128. Porque el bit en el lado izquierdo es dos a la potencia de siete.
Ejemplos;
En estos ejemplos, el bit en el lado izquierdo es 1, significa que estamos agregando los valores de otros bits en la parte superior de -128.
10000000 = -128 (-128 + 0)
10000001 = -127 (-128 + 1)
10000011 = -125 (-128 + 3)
10000111 = -121 (-128 + 7)
mismas bytes, pero esta vez, el bit de la izquierda es 0. esto quiere decir, que estamos empezando a añadir en la parte superior de 0.
00000000 = 0 (0 + 0)
00000001 = 1 (0 + 1)
00000011 = 3 (0 + 3)
00000111 = 7 (0 + 7)
Si estamos bien hasta ahora, la respuesta a su pregunta, el número más pequeño posible con 8 bits con esta regla es;
10000000 = -128
el mayor número posible
011111111 = 127
Por eso, el rango es de entre -128 y 127.
[complemento a dos] (http: //en.wikipedia.org/wiki/Two's_complement) –
Es similar para los otros tipos enteros 'short',' int' y 'long'. – starblue
Una mejor pregunta es '¿por qué el tipo de byte de Java no es un rango de 0..255'? De hecho, muchos hacen esta pregunta, en la mayoría de los idiomas el tipo byte no está firmado, pero en java 'byte' también está firmado, y yo (y muchos otros) creo que fue un mal diseño que permaneció en Java desde el primer día. Hay problemas cuando trabajas JNI, y créanme cuando nombras algo 'byte' que quieres 0..255! –