Valeur Min et Max de type intégral en C #
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.
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