logo

Rozszerzone typy całkowe (wybór prawidłowego rozmiaru liczby całkowitej w C/C++)

C/C++ ma bardzo luźne definicje podstawowych typów danych całkowitych (char short int long i long long). Język gwarantuje, że mogą reprezentować co najmniej pewien zakres wartości, ale dowolna konkretna platforma (sprzęt systemu operacyjnego kompilatora) może być większa.
Dobry przykład jest długi. Na jednej maszynie może to być 32 bity (minimum wymagane przez C). Na innym jest to 64 bity. Co zrobić, jeśli chcesz mieć typ całkowity o długości dokładnie 32 bitów? W tym miejscu pojawia się int32_t: jest to alias dla dowolnego typu liczby całkowitej, jaki ma twój konkretny system, czyli dokładnie 32 bity.
Szablon: 
 

  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 << "Minimum value of it: "<< (int)i << endl;  // Maximum value represented by unsigned 8 bit is 255  i = 255;  cout << "Maximum value of it: "<< (int)i << endl;  // Warning: large integer implicitly truncated to  // unsigned type. It will print any garbage value  i = 2436;  cout << "Beyond range value of it: " << (int)i << endl;  return 0; } 

Wyjście: 
 

 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


Różne odmiany  
1. 8-bitowa liczba całkowita bez znaku o stałej szerokości: uint8_t  
Oznacza to, że daj mi liczbę int bez znaku o długości dokładnie 8 bitów.
2. Minimalna szerokość 8-bitowa liczba całkowita bez znaku: uint_least8_t  
Oznacza to, że daj mi najmniejszy typ unsigned int, który ma co najmniej 8 bitów. Zoptymalizowany pod kątem zużycia pamięci.
3. Najszybsza 8-bitowa liczba całkowita bez znaku o minimalnej szerokości: uint_fast8_t  
Oznacza to, że daj mi liczbę int bez znaku o długości co najmniej 8 bitów, co przyspieszy mój program. Może wybrać większy typ danych ze względu na kwestie wyrównania. Zoptymalizowany pod kątem szybkości.
Zatem gwarantuje się, że uint8_t będzie miał dokładnie 8 bitów szerokości. Uint_least8_t to najmniejsza liczba całkowita, która ma co najmniej 8 bitów szerokości. Uint_fast8_t to najszybsza liczba całkowita, która ma co najmniej 8 bitów szerokości. 
Zatem rozszerzone typy całkowe pomagają nam w pisaniu przenośny I wydajny kod.