Qu'est-ce qu'une valeur portable pour UINT_MIN?
-
29-09-2019 - |
Question
Dans limits.h
, il y a #defines pour INT_MAX
et INT_MIN
(et SHRT_ * et * LONG_ et ainsi de suite), mais seulement UINT_MAX
.
Devrais-je me définir UINT_MIN
? Est-0
(zéro positif) une valeur portable?
La solution
Si vous voulez être « typesafe » vous pouvez utiliser 0U
, donc si vous l'utilisez dans une expression que vous aurez les promotions correctes à unsigned
.
Autres conseils
Il est un entier non signé - par définition la plus petite valeur possible est 0. Si vous voulez une justification en plus juste sens commun, le norme dit:
6.2.6.2 types Entier
- Pour les types d'entiers non signés autres que
unsigned char
, les bits de la représentation de l'objet est divisé en deux groupes: les bits de valeur et des bits de remplissage (il ne doivent pas être l'un quelconque de ceux-ci). S'il y a N bits de valeur, chaque bit représente une puissance différente de 2 comprise entre 1 et 2 ^ ( N -1), de sorte que les objets de ce type doit pouvoir de représenter des valeurs de 0 à 2 ^ ( N -1) en utilisant une représentation binaire pur; cela doit être connu comme la représentation de la valeur. Les valeurs de tous les bits de remplissage ne sont pas spécifiés.
Vous pouvez utiliser std::numeric_limits<unsigned int>::min()
.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow