Namespaces
Variants

Fixed width integer types (since C++11)

From cppreference.net
Utilities library

Contenidos

Tipos

Definido en el encabezado <cstdint>
int8_t int16_t int32_t int64_t
(opcional)
tipo entero con signo con ancho de exactamente 8, 16, 32 y 64 bits respectivamente
sin bits de relleno y usando complemento a 2 para valores negativos
(proporcionado si y solo si la implementación soporta directamente el tipo)
(typedef)
int_fast8_t int_fast16_t int_fast32_t int_fast64_t
tipo entero con signo más rápido con ancho de al menos 8, 16, 32 y 64 bits respectivamente
(typedef)
int_least8_t int_least16_t int_least32_t int_least64_t
tipo entero con signo más pequeño con ancho de al menos 8, 16, 32 y 64 bits respectivamente
(typedef)
intmax_t
tipo entero con signo de ancho máximo
(typedef)
intptr_t
(opcional)
tipo entero con signo capaz de contener un puntero a void
(typedef)
uint8_t uint16_t uint32_t uint64_t
(opcional)
tipo entero sin signo con ancho de exactamente 8, 16, 32 y 64 bits respectivamente
(proporcionado si y solo si la implementación soporta directamente el tipo)
(typedef)
uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t
tipo entero sin signo más rápido con ancho de al menos 8, 16, 32 y 64 bits respectivamente
(typedef)
uint_least8_t uint_least16_t uint_least32_t uint_least64_t
tipo entero sin signo más pequeño con ancho de al menos 8, 16, 32 y 64 bits respectivamente
(typedef)
uintmax_t
tipo entero sin signo de ancho máximo
(typedef)
uintptr_t
(opcional)
tipo entero sin signo capaz de contener un puntero a void
(typedef)

La implementación puede definir nombres de typedef int N _t , int_fast N _t , int_least N _t , uint N _t , uint_fast N _t , y uint_least N _t cuando N no es 8, 16, 32 o 64. Los nombres de typedef de la forma int N _t solo pueden definirse si la implementación admite un tipo entero de ese ancho sin relleno. Por lo tanto, std::uint24_t denota un tipo entero sin signo con un ancho de exactamente 24 bits.

Cada una de las macros listadas a continuación se define si y solo si la implementación define el nombre de tipo correspondiente. Las macros INT N _C y UINT N _C corresponden a los nombres de tipo int_least N _t y uint_least N _t , respectivamente.

Constantes de macro

Definido en el encabezado <cstdint>
Enteros con signo : valor mínimo
INT8_MIN INT16_MIN INT32_MIN INT64_MIN
(opcional)
valor mínimo de std::int8_t , std::int16_t , std::int32_t y std::int64_t respectivamente
(macro constante)
INT_FAST8_MIN INT_FAST16_MIN INT_FAST32_MIN INT_FAST64_MIN
valor mínimo de std::int_fast8_t , std::int_fast16_t , std::int_fast32_t y std::int_fast64_t respectivamente
(macro constante)
INT_LEAST8_MIN INT_LEAST16_MIN INT_LEAST32_MIN INT_LEAST64_MIN
valor mínimo de std::int_least8_t , std::int_least16_t , std::int_least32_t y std::int_least64_t respectivamente
(macro constante)
INTPTR_MIN
(opcional)
valor mínimo de std::intptr_t
(macro constante)
INTMAX_MIN
valor mínimo de std::intmax_t
(macro constante)
Enteros con signo : valor máximo
INT8_MAX INT16_MAX INT32_MAX INT64_MAX
(opcional)
valor máximo de std::int8_t , std::int16_t , std::int32_t y std::int64_t respectivamente
(macro constante)
INT_FAST8_MAX INT_FAST16_MAX INT_FAST32_MAX INT_FAST64_MAX
valor máximo de std::int_fast8_t , std::int_fast16_t , std::int_fast32_t y std::int_fast64_t respectivamente
(macro constante)
INT_LEAST8_MAX INT_LEAST16_MAX INT_LEAST32_MAX INT_LEAST64_MAX
valor máximo de std::int_least8_t , std::int_least16_t , std::int_least32_t y std::int_least64_t respectivamente
(macro constante)
INTPTR_MAX
(opcional)
valor máximo de std::intptr_t
(macro constante)
INTMAX_MAX
valor máximo de std::intmax_t
(macro constante)
Enteros sin signo : valor máximo
UINT8_MAX UINT16_MAX UINT32_MAX UINT64_MAX
(opcional)
valor máximo de std::uint8_t , std::uint16_t , std::uint32_t y std::uint64_t respectivamente
(macro constante)
UINT_FAST8_MAX UINT_FAST16_MAX UINT_FAST32_MAX UINT_FAST64_MAX
valor máximo de std::uint_fast8_t , std::uint_fast16_t , std::uint_fast32_t y std::uint_fast64_t respectivamente
(macro constante)
UINT_LEAST8_MAX UINT_LEAST16_MAX UINT_LEAST32_MAX UINT_LEAST64_MAX
valor máximo de std::uint_least8_t , std::uint_least16_t , std::uint_least32_t y std::uint_least64_t respectivamente
(macro constante)
UINTPTR_MAX
(opcional)
valor máximo de std::uintptr_t
(macro constante)
UINTMAX_MAX
valor máximo de std::uintmax_t
(macro constante)

Macros de función para constantes enteras de ancho mínimo

INT8_C INT16_C INT32_C INT64_C
se expande a una expresión constante entera con el valor especificado por su argumento y cuyo tipo es el tipo promovido de std::int_least8_t , std::int_least16_t , std::int_least32_t y std::int_least64_t respectivamente
(macro de función)
INTMAX_C
se expande a una expresión constante entera con el valor especificado por su argumento y el tipo std::intmax_t
(macro de función)
UINT8_C UINT16_C UINT32_C UINT64_C
se expande a una expresión constante entera con el valor especificado por su argumento y cuyo tipo es el tipo promovido de std::uint_least8_t , std::uint_least16_t , std::uint_least32_t y std::uint_least64_t respectivamente
(macro de función)
UINTMAX_C
se expande a una expresión constante entera con el valor especificado por su argumento y el tipo std::uintmax_t
(macro de función)
#include <cstdint>
UINT64_C(0x123) // se expande a un literal de tipo uint_least64_t y valor 0x123

Constantes de macro de formato

Definido en el encabezado <cinttypes>

Constantes de formato para la familia de funciones std::fprintf

Cada una de las PRI macros listadas aquí está definida si y solo si la implementación define el nombre de tipo correspondiente.

Equivalente
para int o
unsigned int
Descripción Macros para tipos de datos




std::int x _t




std::int_least x _t
std::int_fast x _t
std::intmax_t
std::intptr_t
d salida de un valor entero decimal con signo PRId x PRIdLEAST x PRIdFAST x PRIdMAX PRIdPTR
i PRIi x PRIiLEAST x PRIiFAST x PRIiMAX PRIiPTR
u salida de un valor entero decimal sin signo PRIu x PRIuLEAST x PRIuFAST x PRIuMAX PRIuPTR
o salida de un valor entero octal sin signo PRIo x PRIoLEAST x PRIoFAST x PRIoMAX PRIoPTR
x salida de un valor entero hexadecimal en minúsculas sin signo PRIx x PRIxLEAST x PRIxFAST x PRIxMAX PRIxPTR
X salida de un valor entero hexadecimal en mayúsculas sin signo PRIX x PRIXLEAST x PRIXFAST x PRIXMAX PRIXPTR

Constantes de formato para la familia de funciones std::fscanf

Cada una de las SCN macros listadas aquí está definida si y solo si la implementación define el nombre de tipo correspondiente y tiene un modificador de longitud std::fscanf adecuado para el tipo.

Equivalente
para int o
unsigned int
Descripción Macros para tipos de datos




std::int x _t




std::int_least x _t
std::int_fast x _t
std::intmax_t
std::intptr_t
d entrada de un valor entero decimal con signo SCNd x SCNdLEAST x SCNdFAST x SCNdMAX SCNdPTR
i entrada de un valor entero con signo SCNi x SCNiLEAST x SCNiFAST x SCNiMAX SCNiPTR
u entrada de un valor entero decimal sin signo SCNu x SCNuLEAST x SCNuFAST x SCNuMAX SCNuPTR
o entrada de un valor entero octal sin signo SCNo x SCNoLEAST x SCNoFAST x SCNoMAX SCNoPTR
x entrada de un valor entero hexadecimal sin signo SCNx x SCNxLEAST x SCNxFAST x SCNxMAX SCNxPTR

Notas

Debido a que C++ interpreta un carácter inmediatamente después de un literal de cadena como un literal de cadena definido por el usuario , código C como printf ( "%" PRId64 " \n " ,n ) ; es C++ inválido y requiere un espacio antes de PRId64 .

El estándar C99 sugiere que las implementaciones de C++ no deberían definir los macros de límite, constante o formato mencionados anteriormente a menos que los macros __STDC_LIMIT_MACROS , __STDC_CONSTANT_MACROS o __STDC_FORMAT_MACROS (respectivamente) estén definidos antes de incluir el encabezado C correspondiente ( stdint.h o inttypes.h ). Esta recomendación no fue adoptada por ningún estándar de C++ y fue eliminada en C11. Sin embargo, algunas implementaciones (como glibc 2.17) intentan aplicar esta regla, y puede ser necesario definir los macros __STDC ; los compiladores de C++ pueden intentar solucionar esto definiéndolos automáticamente en algunas circunstancias.

std::int8_t puede ser signed char y std::uint8_t puede ser unsigned char , pero ninguno puede ser char independientemente de su signo (porque char no se considera un "tipo entero con signo" o "tipo entero sin signo").

Ejemplo

Consulte también una nota sobre los espacios antes de las macros de formato utilizadas en este ejemplo.

#include <cinttypes>
#include <cstdio>
int main()
{
    std::printf("%zu\n", sizeof(std::int64_t));
    std::printf("%s\n", PRId64);
    std::printf("%+" PRId64 "\n", INT64_MIN);
    std::printf("%+" PRId64 "\n", INT64_MAX);
    std::int64_t n = 7;
    std::printf("%+" PRId64 "\n", n);
}

Salida posible:

8
lld
-9223372036854775808
+9223372036854775807
+7

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Applied to Behavior as published Correct behavior
LWG 2820 C++11 los requisitos para los nombres de typedef opcionales y macros eran inconsistentes con C se hicieron consistentes

Referencias

  • Estándar C++23 (ISO/IEC 14882:2024):
  • 17.4.1 Sinopsis del encabezado <cstdint> [cstdint.syn]
  • 31.13.2 Sinopsis del encabezado <cinttypes> [cinttypes.syn]
  • Estándar C++20 (ISO/IEC 14882:2020):
  • 17.4 Tipos enteros [cstdint]
  • 29.12.2 Sinopsis del encabezado <cinttypes> [cinttypes.syn]
  • Estándar C++17 (ISO/IEC 14882:2017):
  • 21.4 Tipos enteros [cstdint]
  • 30.11.2 Sinopsis del encabezado <cinttypes> [cinttypes.syn]
  • Estándar C++14 (ISO/IEC 14882:2014):
  • 18.4 Tipos enteros [cstdint]
  • 27.9.2 Archivos de la biblioteca C [c.files]
  • Estándar C++11 (ISO/IEC 14882:2011):
  • 18.4 Tipos enteros [cstdint]
  • 27.9.2 Archivos de biblioteca C [c.files]

Véase también

Documentación de C para Tipos de enteros de ancho fijo