web-dev-qa-db-fra.com

Quelle est la différence entre un Uint32 et un entier non signé en C ++?

Est-ce la même? Si non: quelle est la différence? Si oui, pourquoi avez-vous besoin de ce type?

29
user1511417

uint32_t (ou comme les compilateurs pré-C++ 11 l'appellent) est garanti comme un entier non signé 32 bits; unsigned int est tout entier non signé que le compilateur préfère appeler unsigned int, dans la mesure où il répond aux exigences de la norme (qui exige pour cela une plage minimale 0-65535).

Comme int, unsigned int est généralement un entier qui est rapide à manipuler pour l'architecture actuelle (normalement, il s'inscrit dans un registre), donc il doit être utilisé lorsqu'un entier "normal" et rapide est requis.

uint32_t, à la place, est utilisé lorsque vous avez besoin d'un entier de largeur exacte, par exemple pour sérialiser dans un fichier, ou lorsque vous avez besoin de cette plage exacte ou que vous comptez sur un débordement non signé pour arriver exactement à 2^32-1.

Par exemple, sur un processeur 16 bits unsigned int aura généralement une largeur de 16 bits, tandis que uint32_t va avoir avoir une largeur de 32 bits.


Par ailleurs, comme le souligne @ Marc Glisse, tandis que unsigned int est toujours présent, uint32_t n'est pas obligatoire - une implémentation particulière du compilateur peut ne pas le fournir. Cela est principalement dû au fait que toutes les plates-formes ne peuvent pas facilement fournir un tel type (généralement des DSP avec des tailles de mots étranges).

41
Matteo Italia