logo

Utökade integraltyper (välja rätt heltalsstorlek i C/C++)

C/C++ har mycket lösa definitioner på sina grundläggande heltalsdatatyper (char short int long och long long). Språket garanterar att de kan representera åtminstone ett antal värden, men vilken plattform som helst (hårdvara för kompilatoroperativsystem) kan vara större än så.
Ett bra exempel är långt. På en maskin kan det vara 32 bitar (det minsta som krävs av C). På en annan är den 64 bitar. Vad gör du om du vill ha en heltalstyp som är exakt 32 bitar lång? Det är där int32_t kommer in: det är ett alias för vilken heltalstyp som ditt system har som är exakt 32 bitar.
Mall: 
 

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

Produktion: 
 

 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


Olika varianter  
1. Osignerad 8-bitars heltal med fast bredd: uint8_t  
Det betyder att ge mig en osignerad int på exakt 8 bitar.
2. Minsta bredd utan tecken på 8 bitars heltal: uint_least8_t  
Det betyder att ge mig den minsta typen av osignerad int som har minst 8 bitar. Optimerad för minnesförbrukning.
3. Snabbaste minsta bredd utan tecken på 8 bitars heltal: uint_fast8_t  
Det betyder att ge mig en osignerad int på minst 8 bitar som kommer att göra mitt program snabbare. Det kan välja en större datatyp på grund av anpassningsskäl. Optimerad för hastighet.
Således är en uint8_t garanterat exakt 8 bitar bred. En uint_least8_t är det minsta heltal som garanterat är minst 8 bitar brett. En uint_fast8_t är det snabbaste heltal som garanterat är minst 8 bitar brett. 
Så de utökade integraltyperna hjälper oss att skriva bärbar och effektiv koda.