C/C++ tem definições muito vagas em seus tipos de dados inteiros básicos (char short int long e long long). A linguagem garante que eles possam representar pelo menos algum intervalo de valores, mas qualquer plataforma específica (hardware do sistema operacional do compilador) pode ser maior que isso.
Um bom exemplo é longo. Em uma máquina pode ter 32 bits (o mínimo exigido por C). Em outro, são 64 bits. O que você faz se quiser um tipo inteiro com exatamente 32 bits? É aí que entra int32_t: é um alias para qualquer tipo de número inteiro que seu sistema específico possua, que tenha exatamente 32 bits.
Modelo:
fonte de látex
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; }
Saída:
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
Diferentes variações
1. Inteiro de 8 bits sem sinal de largura fixa: uint8_t
Isso significa me dar um unsigned int de exatamente 8 bits.
2. Inteiro de 8 bits sem sinal de largura mínima: uint_least8_t
Isso significa me dar o menor tipo de unsigned int que tenha pelo menos 8 bits. Otimizado para consumo de memória.
3. Inteiro não assinado de 8 bits com largura mínima mais rápida: uint_fast8_t
Isso significa me dar um unsigned int de pelo menos 8 bits, o que tornará meu programa mais rápido. Ele pode escolher tipos de dados maiores devido a considerações de alinhamento. Otimizado para velocidade.
Assim, é garantido que um uint8_t tenha exatamente 8 bits de largura. Um uint_least8_t é o menor número inteiro garantido com pelo menos 8 bits de largura. Um uint_fast8_t é o número inteiro mais rápido com garantia de pelo menos 8 bits de largura.
Portanto, os tipos de integrais estendidas nos ajudam a escrever portátil e eficiente código.
formiga vs maven