2010-09-29 21 views
7

Duplicar posible:
What is "2's Complement"?¿Por qué int32 tiene valor max 2^31 -1

sé int32 es tiene una longitud de 32 bits (4 bytes). Supongo que tiene 2^32 valores, pero como la mitad de ellos debe estar bajo cero, creo que tiene algo que ver con esto. Me gustaría saber por qué exactamente int32 tiene max. número positivo 2^31 -1.

+0

duplicado de [¿Por qué el valor máximo de un entero n-bit sin signo 2^n-1 y no 2^n?] (Https://stackoverflow.com/questions/5771520/why-is-the-maximum -value-de-un-unsigned-n-bit-integer-2n-1-and-not-2n) –

Respuesta

23

2^32 valores posibles

− 2^31 valores utilizados para negative integers

− 1 valor utilizado para el cero

= 2^31 − 1 Valores disponibles para números enteros positivos

33

Este bit más significativo se usa para codificar el signo (1 significa negativo), por lo que solo 31 bits están disponibles para el valor real.

Int32.MaxValue = 2^31 - 1 = 01111111111111111111111111111111 
        1  = 00000000000000000000000000000001 
        0  = 00000000000000000000000000000000 
       -1  = 11111111111111111111111111111111 
Int32.MinValue = -2^31  = 10000000000000000000000000000000 
0

usted tiene 2^31 valores por debajo de cero (valor mínimo = -2^31), 2^31-1 valores por encima de cero y cero en sí. Eso hace 2^31 + 2^31-1 + 1 = 2 * 2^31 = 2^32 valores :) ...

La otra explicación involucra la forma en que se representan los números negativos (usando el complemento doble): En breve, el bit más significativo indica un número negativo, por lo que tiene 2^31 números positivos (incluyendo cero), lo que nos da el rango 0..2^31-1

4

2^32 es sobre 4,2 mil millones. Este es el número máximo de VALORES que puede representar un número binario con 32 dígitos (un número de 32 bits).

Esos valores pueden ser cualquier valor en cualquier rango. En un número UNSIGNED de 32 bits, los valores válidos son de 0 a 2^32-1 (en lugar de 1 a 2^32, pero el mismo número de VALUES, aproximadamente 4,2 mil millones).

En un número de 32 bits FIRMADO, uno de los 32 bits se usa para indicar si el número es negativo o no. Esto reduce el número de valores en 2^1, o en la mitad. Esto deja 2^31, que es aproximadamente 2.1 mil millones. Esto significa que el rango ahora es de aproximadamente 2.100 millones a 2.100 millones. Mismo número de valores, diferente rango.

Cuestiones relacionadas