c# - tipos - ¿Por qué el valor máximo de Int32 es 0x7FFFFFFF?
tipos de datos en c# (6)
El primer bit es el signo: un int32 está firmado, es decir, puede ser positivo / negativo (¡bueno, probablemente no debería decir ''primero''!)
Vi en documentos de MSDN que el valor máximo de Int32
es 2,147,483,647
, hexadecimal 0x7FFFFFFF
.
http://msdn.microsoft.com/en-us/library/system.int32.maxvalue.aspx
Creo que, si es Int32
, debería almacenar 32 bits de valor entero que finalmente debería ser 4,294,967,295
y hexadecimal 0xFFFFFFFF
.
Mi pregunta es por qué Int32
almacena 31
bits de valor entero?
Porque un bit se usa para almacenar el signo (Int32 puede ser menor que cero).
No estás considerando los números negativos. Int32
tiene el signo.
Desde MSDN: http://msdn.microsoft.com/en-us/library/system.int32.minvalue.aspx MinValue
es MinValue
; es decir, hexadecimal 0x80000000
.
Int32 e Int64 están firmados para que puedan manejar valores enteros de -capacidad / 2 a (capacidad / 2) -1 (para cero) por lo que el valor máximo no es el que esperaba. Pero puede obtener lo que quiere utilizando una int sin signo para tener solo números positivos.
En el tipo n-bit con signo de complemento a 2, el rango es de -2 n-1 a 2 n-1 -1 porque con n bits puede representar 2 n valores diferentes, la mitad de los cuales se utilizan para los números con signo debido al signo poco. Los 2 n-1 restantes se usan para números no negativos. Dado que uno se usa para 0, solo hay 2 n-1 -1 valores restantes para números positivos
Es porque es un número entero con signo. Un entero sin signo de 32 bits le da el valor que espera.
Consulte esta página de MSDN: http://msdn.microsoft.com/en-us/library/exx3b86w(v=vs.80).aspx
Para una explicación más detallada de por qué esto es consultar el enlace en la respuesta de Jackson Papas relacionado con la representación del número de complemento de Two.
También algunas lecturas adicionales .