logo

Розширені інтегральні типи (вибір правильного розміру цілого числа в C/C++)

C/C++ має дуже вільні визначення основних цілочисельних типів даних (char short int long і long long). Мова гарантує, що вони можуть представляти принаймні деякий діапазон значень, але будь-яка конкретна платформа (апаратне забезпечення операційної системи компілятора) може бути більшим за цей.
Хороший приклад довгий. На одній машині це може бути 32 біти (мінімум, який вимагає C). На іншому це 64 біти. Що робити, якщо вам потрібен цілочисельний тип довжиною рівно 32 біти? Ось тут і з’являється int32_t: це псевдонім будь-якого типу цілого числа, який має ваша конкретна система, а саме 32 біти.
Шаблон: 
 

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

Вихід: 
 

 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


Різні варіації  
1. 8-бітне ціле число без знаку фіксованої ширини: uint8_t  
Це означає, дайте мені беззнакове ціле рівно 8 біт.
2. Мінімальна ширина беззнакового 8-бітного цілого числа: uint_least8_t  
Це означає, що дайте мені найменший тип unsigned int, який має принаймні 8 біт. Оптимізовано для використання пам'яті.
3. Найшвидше 8-бітне ціле число без знаку з мінімальною шириною: uint_fast8_t  
Це означає, що дайте мені беззнакове ціле принаймні 8 біт, що зробить мою програму швидшою. Він може вибрати більший тип даних через міркування вирівнювання. Оптимізовано для швидкості.
Таким чином uint8_t гарантовано матиме рівно 8 біт. uint_least8_t — це найменше ціле число, яке гарантовано має принаймні 8 біт. uint_fast8_t — це найшвидше ціле число, яке гарантовано має щонайменше 8 біт. 
Отже, розширені інтегральні типи допомагають нам у написанні портативний і ефективний код.