C/C++ are definiții foarte laxe pentru tipurile sale de date întregi de bază (char short int long și long long). Limbajul garantează că pot reprezenta cel puțin o gamă de valori, dar orice platformă anume (hardware-ul sistemului de operare al compilatorului) ar putea fi mai mare decât atât.
Un exemplu bun este lung. Pe o singură mașină ar putea fi 32 de biți (minimul cerut de C). Pe altul are 64 de biți. Ce faci dacă vrei un tip întreg care să aibă exact 32 de biți? Aici intervine int32_t: este un alias pentru orice tip de întreg pe care îl are sistemul tău, care este exact 32 de biți.
Șablon:
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; }
Ieșire:
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
Variante diferite
1. Număr întreg de 8 biți fără semn cu lățime fixă: uint8_t
Înseamnă să-mi dai un int nesemnat de exact 8 biți.
2. Lățimea minimă fără semn întreg de 8 biți: uint_least8_t
Înseamnă să-mi dai cel mai mic tip de int nesemnat care are cel puțin 8 biți. Optimizat pentru consumul de memorie.
3. Cea mai rapidă lățime minimă fără semn întreg de 8 biți: uint_fast8_t
Înseamnă să-mi dați un int nesemnat de cel puțin 8 biți, ceea ce îmi va face programul mai rapid. Poate alege un tip de date mai mare din cauza considerentelor de aliniere. Optimizat pentru viteza.
Astfel, un uint8_t este garantat a avea exact 8 biți lățime. Un uint_least8_t este cel mai mic număr întreg garantat a avea cel puțin 8 biți lățime. Un uint_fast8_t este cel mai rapid întreg garantat a avea cel puțin 8 biți lățime.
Deci tipurile integrale extinse ne ajută în scris portabil şi eficient cod.