Išplėstiniai integraliniai tipai (tinkamo sveikojo skaičiaus dydžio pasirinkimas C/C++)

C/C++ pagrindinių sveikųjų duomenų tipų apibrėžimai yra labai laisvi (char short in long ir long long). Kalba garantuoja, kad jie gali atstovauti bent tam tikrą reikšmių diapazoną, tačiau bet kuri konkreti platforma (kompiliatoriaus operacinės sistemos aparatinė įranga) gali būti didesnė.
Geras pavyzdys yra ilgas. Viename įrenginyje jis gali būti 32 bitai (minimalus, kurio reikalauja C). Kitu atveju tai yra 64 bitai. Ką daryti, jei norite, kad sveikasis skaičius būtų tiksliai 32 bitų ilgio? Štai čia atsiranda int32_t: tai slapyvardis bet kokio tipo sveikajam skaičiui, kurį turi jūsų konkreti sistema, kuris yra lygiai 32 bitai.
Šablonas: 
 

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

Išvestis: 
 

 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 


Įvairūs variantai  
1. Fiksuoto pločio nepaženklintas 8 bitų sveikasis skaičius: uint8_t  
Tai reiškia, kad duok man nepasirašytą lygiai 8 bitų int.
2. Mažiausias plotis be ženklų 8 bitų sveikasis skaičius: uint_least8_t  
Tai reiškia, duokite man mažiausio tipo nepasirašytą int, kuris turi mažiausiai 8 bitus. Optimizuotas atminties sunaudojimui.
3. Greičiausias mažiausias plotis be ženklų 8 bitų sveikasis skaičius: uint_fast8_t  
Tai reiškia, kad suteikite man nepasirašytą bent 8 bitų int, kuris pagreitins mano programą. Jis gali pasirinkti didesnį duomenų tipą dėl suderinimo. Optimizuotas greičiui.
Taigi garantuojama, kad uint8_t yra tiksliai 8 bitų pločio. Uint_least8_t yra mažiausias sveikas skaičius, kurio plotis yra mažiausiai 8 bitai. Uint_fast8_t yra greičiausias sveikasis skaičius, kurio plotis yra mažiausiai 8 bitai. 
Taigi išplėstiniai integralo tipai mums padeda rašyti nešiojamas ir efektyvus kodas.