Question

Quelle est la formule mathématique pour calculer la valeur MIN et MAX d'un type intégral à l'aide de votre calculatrice. Je sais que vous pouvez utiliser Integer.Max ou Integer.Min etc ou regarder sur msdn mais je veux savoir comment le calculer.

Était-ce utile?

La solution

Pour les types non signés:

  • Valeur min = 0
  • Valeur max = (2 ** (nombre de bits)) - 1

Alors, pour UInt32:

Min value = 0

Max value = (2 ** 32) - 1
          = 4294967296 - 1
          = 4294967295

Pour les types signés:

  • valeur Min = 0 - (2 ** (nombre de bits - 1))
  • Valeur max = (2 ** (nombre de bits - 1)) - 1

Alors, pour 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

Autres conseils

J'utilise un 32bits entier signé dans cet exemple. 31 bits sont utilisés pour la création de valeur 2 ^ 31 possibilités. Zéro doit être inclus, vous devez soustraire un.

2^31-1

Lorsque négatif, nul ne doit pas être inclus, vous obtenez ainsi la gamme complète.

-2^31

Dans le cas d'un entier non signé, le maximum est simplement 2^32-1, et le 0 min.

Vous devez savoir combien de bits du type et si elle est signée ou non.

Par exemple, un int est de 32 bits en C # et est signé. Cela signifie qu'il y a 31 bits pour représenter le nombre (1 bit est utilisé pour déterminer négative ou postive). Donc, vous calculerait 2 31 et soustraire celui qui est 2147483647, (qui est ce qui revient Integer.MAXVALUE).

similairement un byte est de 8 bits et non signé de sorte que la valeur maximale est de 2 8 -1 ou 255.

Exemple Une réponse pour votre question
int signé:

Min=(1 << ((sizeof(int) * 8) - 1));
Max=~(1 << ((sizeof(int) * 8) - 1));

aussi

Min=~(int)((~((uint)0))>>1);
Max=(int)((~((uint)0))>>1);

unsigned int:

Min=0;
Max=~((uint)0);

La variable valeur Min / Max d'un entier est dérivé du nombre de bits utilisés (habituellement à la puissance de 2, à savoir 2bits, 4bits, 8bits). Un INT en C # utilise 32 bits, et en tant que telle peut avoir une valeur MAX de 4294967295 - comme cela est la valeur maximale de 32 bits de données peuvent représenter -. Comme je crois comprendre, de toute façon

Si votre calculatrice a une conversion binaire-décimal (déc-à six pans fonctionneraient également), essayez de le convertir Int32.MaxValue et voir si vous apercevez le motif ...

Je crois que vous trouverez ce utile:
Entier (Informatique) @ Wikipedia

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top