2012-10-12 55 views
11

Disculpe si esta es una pregunta realmente básica, pero ¿por qué hay un menos uno para el lado positivo?¿Por qué es el número máximo en java 2^31 - 1 y no 2^31

¿Tiene que ver con el cero almacenado o algo así? Pensé computar el mayor número decimal binario posible que no sería más que añadir las potencias de dos hasta, al igual que para un bit 3 sin firmar sería

1*2^0 + 1*2^1 + 1*2^2 = 7 

no debe aplicarse la misma regla para los enteros de Java? Gracias

+1

Debido a [complemento de dos] (http://en.wikipedia.org/wiki/Two's_complement); vea la pregunta relacionada: http://stackoverflow.com/questions/3809044/how-many-values-can-be-represented-with-9-bits/3809058#3809058 – NullUserException

+0

Madre de Dios, publicando por primera vez en una etiqueta java y hay muchas respuestas, ¡gracias a todos! –

Respuesta

12

Porque Java puede admitir max signed int como 0x7fffffff que es 2^31-1.

2^31 = 0x80000000 is negative so Positive is 2^31-1 

comparasion nivel binario sería:

10000000000000000000000000000000 --> 2147483648 --> 2^31 
01111111111111111111111111111111 --> 2147483647 --> 2^31 -1 
^ Sign bit 
+0

Gracias, esto lo hace un poco más claro –

+1

"Bit firmado" debe ser "Bit de señal" – Roland

6

La misma regla se aplica ... 7 es 2^3 - 1. Y sí, es debido a la 0. :)

Por el contrario, los negativos van a -(2^31)

Así que hay 2^31 números negativos, uno 0 y 2^31-1 positivos estrictas, que se suman a ...

2^31 + 1 + 2^31 - 1 = 2 * 2^31 = 2^32 
2

Tiene que dividirse 2^32.
1/2 son negativos.
0 cuenta con lo positivo.
En matemáticas 0 no es ni negativo ni positivo.
Es consistente en .NET y MSSQL.

Si observa que el conjunto que no incluye negativos se llama unsigned.
Contiene 0 y no sería apropiado llamarlo positivo.
Dado que el mundo binario comienza en 0, se trata como positivo.
La respuesta de Jack (+1) tiene por qué.

+1

0 no se considera positivo, se inserta entre los números positivos en complemento a dos solo por cuestión de conveniencia. – Jack

+0

@NullUserException Tiene razón Acabo de Wikidiar y actualicé mi respuesta. – Paparazzi

3

Hay 2^31 números no negativos que van desde 0 hasta 2^31-1. Entonces, sí, zero también se almacena como un número entero. Y también, hay 2^31 números negativos que van desde -2^31 a -1.

1

Si tiene n bits, tiene 2^(n-1) números negativos (como el bit superior es un 1) y 2^(n-1) números no negativos. Como cero es un número no negativo, tiene hasta 2^(n-1) -1 números positivos que también es el máximo.

Nota: no hay positivo para el número más negativo por lo

-Integer.MIN_VALUE == Integer.MIN_VALUE 
5

Es debido a la comodidad del complementode dos (lo que evita el almacenamiento de dos ceros), y almacena Java números con que rapresentation. Eche un vistazo here.

0

enteros Java se firmaron cantidades, por lo que un bit está reservado para el signo, dejando 31 bits para el valor.

Cuestiones relacionadas