Fixed width integer types (since C++11)
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
|