Quelle est la valeur maximale pour un UInt32?
Existe-t-il un moyen d'utiliser l'opérateur sizeof pour obtenir la valeur maximale (car il n'est pas signé)? Je ne me retrouve donc pas avec des #defines ou des nombres magiques dans mon code.
Il y a une macro UINT32_MAX
défini dans stdint.h
que vous pouvez utiliser
#include <stdint.h>
uint32_t max = UINT32_MAX;
<stdint.h>
:http://pubs.opengroup.org/onlinepubs/009695299/basedefs/stdint.h.html
La valeur maximale pour UInt32 est 0xFFFFFFFF
(Ou 4294967295 en décimal).
sizeof(UInt32)
ne retournerait pas la valeur maximale; il retournerait 4, la taille en octets d'un entier non signé de 32 bits.
Définissez simplement le maximum à l'aide de la notation hexadécimale standard, puis vérifiez-le par rapport à tout ce dont vous avez besoin. 32 bits est 8 octets hexadécimaux, donc ce serait comme ceci:
let myMax: UInt32 = 0xFFFFFFFF
if myOtherNumber > myMax {
// resolve problem
}
Une alternative pour tout non signé en C ou C++ est:
anUnsigned = -1;
C'est utile car cela fonctionne pour tous, donc si vous changez de unsigned int
à unsigned long
vous n'avez pas besoin de parcourir votre code. Vous verrez également cela utilisé dans beaucoup de code de violon:
anUnsigned |= -(aBoolOrConditionThatWhenTrueCausesAnUnsignedToBeSetToAll1s)
anUnsigned |= -(!aValueThatWhenZeroCausesAnUnsignedToBeSetToAll1s)
anUnsigned |= -(!!aValueThatWhenNonZeroCausesAnUnsignedToBeSetToAll1s)
L'inconvénient est qu'il semble étrange, attribuant un nombre négatif à un non signé!
4.294.967.295 est la valeur maximale ou en hexadécimal 0xFFFFFFFF
La manière portable:
std::numeric_limits<uint32_t>::max()