C/C++ heeft zeer losse definities van de fundamentele gegevenstypen voor gehele getallen (char short int long en long long). De taal garandeert dat ze op zijn minst een bepaald bereik van waarden kunnen vertegenwoordigen, maar elk specifiek platform (hardware van het besturingssysteem van de compiler) kan groter zijn dan dat.
Een goed voorbeeld is lang. Op één machine kan dit 32 bits zijn (het minimum vereist door C). Op een andere is het 64 bits. Wat doe je als je een geheel getaltype wilt dat precies 32 bits lang is? Dat is waar int32_t om de hoek komt kijken: het is een alias voor welk geheel getaltype jouw specifieke systeem ook heeft, dat is precies 32 bits.
Sjabloon:
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; }
Uitgang:
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
Verschillende variaties
1. 8-bits geheel getal zonder teken met vaste breedte: uint8_t
Het betekent dat ik een niet-ondertekende int van precies 8 bits moet krijgen.
2. Minimumbreedte 8-bits geheel getal zonder teken: uint_least8_t
Het betekent dat ik het kleinste type niet-ondertekende int moet geven dat minimaal 8 bits heeft. Geoptimaliseerd voor geheugengebruik.
3. Snelste minimale breedte, 8-bits geheel getal zonder teken: uint_fast8_t
Het betekent dat ik een niet-ondertekende int van minimaal 8 bits moet krijgen, waardoor mijn programma sneller wordt. Het kan een groter gegevenstype kiezen vanwege uitlijningsoverwegingen. Geoptimaliseerd voor snelheid.
Een uint8_t is dus gegarandeerd exact 8 bits breed. Een uint_least8_t is het kleinste gehele getal dat gegarandeerd minimaal 8 bits breed is. Een uint_fast8_t is het snelste gehele getal dat gegarandeerd minimaal 8 bits breed is.
De uitgebreide integraaltypen helpen ons dus bij het schrijven draagbaar En efficiënt code.