web-dev-qa-db-fra.com

Comment définir un UInt32 à sa valeur maximale

  1. Quelle est la valeur maximale pour un UInt32?

  2. 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.

25
Aran Mulholland

Il y a une macro UINT32_MAX défini dans stdint.h que vous pouvez utiliser

#include <stdint.h>

uint32_t max = UINT32_MAX;

En savoir plus sur l'en-tête correspondant <stdint.h>:

http://pubs.opengroup.org/onlinepubs/009695299/basedefs/stdint.h.html

44
CouchDeveloper

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.

13
liamnichols

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
}
5
Ryan Dines

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é!

2
Howard Lovatt

4.294.967.295 est la valeur maximale ou en hexadécimal 0xFFFFFFFF

1
Modass

La manière portable:

std::numeric_limits<uint32_t>::max()
1
Renaud