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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top