Types intégraux étendus (Choisir la taille entière correcte en C/C++)

C/C++ a des définitions très vagues sur ses types de données entiers de base (char short int long et long long). Le langage garantit qu'ils peuvent représenter au moins une certaine plage de valeurs, mais toute plate-forme particulière (matériel du système d'exploitation du compilateur) peut être plus grande que cela.
Un bon exemple est long. Sur une machine, il peut s'agir de 32 bits (le minimum requis par C). Sur un autre, c'est 64 bits. Que faites-vous si vous voulez un type entier d’une longueur précise de 32 bits ? C'est là qu'intervient int32_t : c'est un alias pour le type entier de votre système particulier qui fait exactement 32 bits.
Modèle: 
 

  intN_t or uintN_t   Where N is width of integer which can be 8 16 32 64 or any other type width supported by the library. 


 

CPP
   // C++ program to show use of extended integral types   #include      using     namespace     std  ;   int     main  ()   {      uint8_t     i  ;     // i with width of exact 8 bits      // Minimum value represented by unsigned 8 bit is 0      i     =     0  ;      cout     &  lt  ;  &  lt  ;     &  quot  ;  Minimum     value     of     i    t  :     &  quot  ;  &  lt  ;  &  lt  ;     (  int  )  i     &  lt  ;  &  lt  ;     endl  ;      // Maximum value represented by unsigned 8 bit is 255      i     =     255  ;      cout     &  lt  ;  &  lt  ;     &  quot  ;  Maximum     value     of     i    t  :     &  quot  ;  &  lt  ;  &  lt  ;     (  int  )  i     &  lt  ;  &  lt  ;     endl  ;      // Warning: large integer implicitly truncated to      // unsigned type. It will print any garbage value      i     =     2436  ;      cout     &  lt  ;  &  lt  ;     &  quot  ;  Beyond     range     value     of     i    t  :     &  quot  ;     &  lt  ;  &  lt  ;     (  int  )  i     &  lt  ;  &  lt  ;     endl  ;      return     0  ;   }   

Sortir: 
 

 In function 'int main()': 19:7:   warning  : large integer implicitly truncated to unsigned type [-overflow] i = 2436; ^ Minimum value of i : 0 Maximum value of i : 255 Beyond range value of i : 132 


Différentes variantes  
1. Entier 8 bits non signé à largeur fixe : uint8_t  
Cela signifie me donner un entier non signé d'exactement 8 bits.
2. Entier non signé de 8 bits de largeur minimale : uint_least8_t  
Cela signifie me donner le plus petit type d’entier non signé comportant au moins 8 bits. Optimisé pour la consommation de mémoire.
3. Entier non signé de 8 bits de largeur minimale la plus rapide : uint_fast8_t  
Cela signifie me donner un entier non signé d'au moins 8 bits, ce qui rendra mon programme plus rapide. Il peut choisir un type de données plus volumineux en raison de considérations d'alignement. Optimisé pour la vitesse.
Ainsi, un uint8_t est garanti d'avoir exactement 8 bits de large. Un uint_least8_t est le plus petit entier garanti d'avoir une largeur d'au moins 8 bits. Un uint_fast8_t est l'entier le plus rapide garanti avec une largeur d'au moins 8 bits. 
Les types intégraux étendus nous aident donc à écrire portable et efficace code.