Ce face std::int32_t
Standardul C++ nu fixează mărimea lui int sau long: long are 64 de biți pe Linux și macOS, dar 32 pe Windows. Tipurile din <cstdint> au mărimea scrisă în nume: std::int32_t are exact 32 de biți (de la −2.147.483.648 la 2.147.483.647), std::int64_t 64 de biți, std::uint8_t 8 biți fără semn (0–255).
Folosește-le când mărimea contează: formate de fișiere, protocoale de rețea, culori (uint8_t pentru R, G, B), sume mari de bani în bani (int64_t).
std::uint8_t este de fapt un unsigned char, așa că std::cout îl afișează ca literă. std::println îl afișează ca număr.
Ce returnează
Tipuri de date (alias-uri pentru tipurile întregi potrivite ale platformei).
Exemple
Exemplul 1: Mărimi și limite
#include <cstdint>
#include <limits>
#include <print>
int main() {
std::println("int32_t: {} octeți, max {}", sizeof(std::int32_t), std::numeric_limits<std::int32_t>::max());
std::println("int64_t: {} octeți, max {}", sizeof(std::int64_t), std::numeric_limits<std::int64_t>::max());
std::println("uint8_t: {} octet, interval 0..{}", sizeof(std::uint8_t), std::numeric_limits<std::uint8_t>::max());
std::int64_t populatieMondiala = 8'100'000'000; // nu încape în int32_t
std::println("populație: {}", populatieMondiala);
}
Rezultat
int32_t: 4 octeți, max 2147483647
int64_t: 8 octeți, max 9223372036854775807
uint8_t: 1 octet, interval 0..255
populație: 8100000000
Exemplul 2: Culori RGB și capcana cu cout
Pentru std::cout, uint8_t este un caracter: valoarea 65 apare ca litera A. Conversia la int rezolvă problema.
#include <cstdint>
#include <iostream>
#include <print>
struct Culoare {
std::uint8_t r, g, b;
};
int main() {
Culoare albastru{0, 102, 204};
std::println("rgb({}, {}, {})", albastru.r, albastru.g, albastru.b);
std::uint8_t x = 65;
std::cout << "cu cout: " << x << ", cu conversie: " << static_cast<int>(x) << '\n';
std::uint8_t maxim = 255;
maxim += 1; // tipurile fără semn se rotesc
std::println("255 + 1 în uint8_t = {}", maxim);
}
Rezultat
rgb(0, 102, 204)
cu cout: A, cu conversie: 65
255 + 1 în uint8_t = 0
Greșeli frecvente
- Afișezi un
std::uint8_tsaustd::int8_tcustd::coutși obții un caracter ciudat. Convertește laintînainte de afișare. - Depășești un
std::int32_t(de exemplu înmulțind două valori mari). Depășirea tipurilor cu semn este comportament nedefinit; foloseștestd::int64_tpentru rezultate mari.
Comenzi înrudite
std::size_t: Tip întreg fără semn pentru mărimi și indici: îl returnează sizeof și metodele size() ale containerelor.std::numeric_limits: Dă proprietățile unui tip numeric: valoarea maximă și minimă, precizia, dacă are semn, infinitul.int: Tipul de bază pentru numere întregi (fără zecimale), de obicei pe 4 octeți, cu valori între aproximativ -2,1 și 2,1 miliarde.std::in_range: Verifică dacă un număr întreg încape în alt tip întreg, fără capcanele conversiilor cu semn.