valor mínimo y máximo de tipo integral en C #
Pregunta
¿Cuál es la fórmula matemática para calcular el valor MIN y MAX de un tipo entero usando la calculadora. Sé que usted puede utilizar Integer.Max o Integer.Min etc o buscarlo en MSDN sin embargo yo quiero saber cómo calcularlo.
Solución
Para los tipos sin signo:
- Min valor = 0
- valor Max = (2 ** (número de bits)) - 1
Así, por UInt32
:
Min value = 0
Max value = (2 ** 32) - 1
= 4294967296 - 1
= 4294967295
Para los tipos firmados:
- valor Min = 0 - (2 ** (número de bits - 1))
- valor Max = (2 ** (número de bits - 1)) - 1
Así, por Int32
:
Min value = 0 - (2 ** (32 - 1))
= 0 - (2 ** 31)
= 0 - 2147483648
= -2147483648
Max value = (2 ** (32 - 1)) - 1
= (2 ** 31) - 1
= 2147483648 - 1
= 2147483647
Otros consejos
Estoy usando un número entero de 32 bits firmados en este ejemplo. 31 bits se utilizan para la creación de valor 2 ^ 31 posibilidades. Como tiene que ser incluido cero, hay que restar uno.
2^31-1
Cuando es negativo, cero no tiene que ser incluido, por tanto, se obtiene toda la gama.
-2^31
En el caso de un entero sin signo, el máximo es simplemente 2^32-1
, y el min 0
.
Lo que necesita saber cuántos bits es el tipo y si se firma o no.
Por ejemplo, un int
es de 32-bits en C # y está firmado. Esto significa que hay 31 bits para representar el número (1 bit se utiliza para determinar negativo o postive). Así se calcularía 2 31 y restar uno que es 2147483647, (que es lo que vuelve Integer.MaxValue).
Similary un byte
es de 8 bits y no firmado de modo que el valor máximo es de 2 8 -1 o 255.
Un ejemplo de tu pregunta respuesta
int firmado:
Min=(1 << ((sizeof(int) * 8) - 1));
Max=~(1 << ((sizeof(int) * 8) - 1));
también
Min=~(int)((~((uint)0))>>1);
Max=(int)((~((uint)0))>>1);
unsigned int:
Min=0;
Max=~((uint)0);
El valor Min / Max de una variable entera se deriva de la cantidad de bits utilizados (por lo general a la potencia de 2, es decir, 2 bits, 4 bits, 8 bits). Un INT en C # utiliza 32 bits, y como tal puede tener un valor máximo de 4294967295 - ya que este es el valor máximo de 32 bits de datos se representan -. Como es mi comprensión, de todos modos
Si su calculadora tiene una conversión de decimal a binario (desc-a-hex también funcionaría), trata de convertir Int32.MaxValue y ver si ve el patrón ...
Creo que se le ha resultado útil:
Entero (Computer Science) @ Wikipedia