Razširjeni tipi integralov (izbira pravilne velikosti celega števila v C/C++)

C/C++ ima zelo ohlapne definicije svojih osnovnih celih tipov podatkov (char short int long in long long). Jezik zagotavlja, da lahko predstavljajo vsaj nekaj obsega vrednosti, vendar je katera koli določena platforma (strojna oprema operacijskega sistema prevajalnika) lahko večja od tega.
Dober primer je dolg. Na enem stroju je lahko 32 bitov (minimum, ki ga zahteva C). Na drugem je 64 bitov. Kaj storite, če želite vrsto celega števila, ki je dolga natančno 32 bitov? Tu nastopi int32_t: to je vzdevek za kateri koli tip celega števila, ki ga ima vaš določen sistem in je točno 32 bitov.
Predloga: 
 

  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  ;   }   

Izhod: 
 

 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 


Različne različice  
1. Nepredznačeno 8-bitno celo število fiksne širine: uint8_t  
To pomeni, daj mi nepredznačeno int natančno 8 bitov.
2. Najmanjša širina nepredznačenega 8-bitnega celega števila: uint_least8_t  
To pomeni, dajte mi najmanjšo vrsto unsigned int, ki ima vsaj 8 bitov. Optimizirano za porabo pomnilnika.
3. Najhitrejše 8-bitno celo število brez predznaka najmanjše širine: uint_fast8_t  
Pomeni, daj mi vsaj 8-bitno nepredznačeno int, zaradi česar bo moj program hitrejši. Morda bo izbral večji podatkovni tip zaradi pomislekov glede poravnave. Optimizirano za hitrost.
Tako je zajamčeno, da bo uint8_t širok točno 8 bitov. Uint_least8_t je najmanjše celo število, ki je zajamčeno široko vsaj 8 bitov. Uint_fast8_t je najhitrejše celo število, ki je zajamčeno široko vsaj 8 bitov. 
Pri pisanju nam torej pomagajo razširjeni integralni tipi prenosni in učinkovito kodo.