Namespaces
Variants

Fixed width integer types (since C++11)

From cppreference.net
Utilities library

목차

타입

헤더 파일에 정의됨 <cstdint>
int8_t int16_t int32_t int64_t
(optional)
각각 정확히 8, 16, 32, 64비트 너비를 가지는 부호 있는 정수형
패딩 비트 없이 2의 보수 방식으로 음수 표현
(구현이 해당 타입을 직접 지원하는 경우에만 제공됨)
(typedef)
int_fast8_t int_fast16_t int_fast32_t int_fast64_t
각각 최소 8, 16, 32, 64비트 너비를 가지는 가장 빠른 부호 있는 정수형
(typedef)
int_least8_t int_least16_t int_least32_t int_least64_t
각각 최소 8, 16, 32, 64비트 너비를 가지는 가장 작은 부호 있는 정수형
(typedef)
intmax_t
최대 너비 부호 있는 정수형
(typedef)
intptr_t
(optional)
void 포인터를 저장할 수 있는 부호 있는 정수형
(typedef)
uint8_t uint16_t uint32_t uint64_t
(optional)
각각 정확히 8, 16, 32, 64비트 너비를 가지는 부호 없는 정수형
(구현이 해당 타입을 직접 지원하는 경우에만 제공됨)
(typedef)
uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t
각각 최소 8, 16, 32, 64비트 너비를 가지는 가장 빠른 부호 없는 정수형
(typedef)
uint_least8_t uint_least16_t uint_least32_t uint_least64_t
각각 최소 8, 16, 32, 64비트 너비를 가지는 가장 작은 부호 없는 정수형
(typedef)
uintmax_t
최대 너비 부호 없는 정수형
(typedef)
uintptr_t
(optional)
void 포인터를 저장할 수 있는 부호 없는 정수형
(typedef)

구현체는 N 이 8, 16, 32 또는 64가 아닐 때 typedef 이름 int N _t , int_fast N _t , int_least N _t , uint N _t , uint_fast N _t , 그리고 uint_least N _t 를 정의할 수 있습니다. int N _t 형태의 typedef 이름은 구현체가 패딩 없이 해당 너비의 정수 타입을 지원하는 경우에만 정의될 수 있습니다. 따라서 std::uint24_t 는 정확히 24비트 너비의 부호 없는 정수 타입을 나타냅니다.

아래에 나열된 각 매크로는 구현이 해당 typedef 이름을 정의하는 경우에만 정의됩니다. 매크로 INT N _C UINT N _C 는 각각 typedef 이름 int_least N _t uint_least N _t 에 대응됩니다.

매크로 상수

헤더에 정의됨 <cstdint>
부호 있는 정수 : 최솟값
INT8_MIN INT16_MIN INT32_MIN INT64_MIN
(선택적)
각각 std::int8_t , std::int16_t , std::int32_t , std::int64_t 의 최솟값
(매크로 상수)
INT_FAST8_MIN INT_FAST16_MIN INT_FAST32_MIN INT_FAST64_MIN
각각 std::int_fast8_t , std::int_fast16_t , std::int_fast32_t , std::int_fast64_t 의 최솟값
(매크로 상수)
INT_LEAST8_MIN INT_LEAST16_MIN INT_LEAST32_MIN INT_LEAST64_MIN
각각 std::int_least8_t , std::int_least16_t , std::int_least32_t , std::int_least64_t 의 최솟값
(매크로 상수)
INTPTR_MIN
(선택적)
std::intptr_t 의 최솟값
(매크로 상수)
INTMAX_MIN
std::intmax_t 의 최솟값
(매크로 상수)
부호 있는 정수 : 최댓값
INT8_MAX INT16_MAX INT32_MAX INT64_MAX
(선택적)
각각 std::int8_t , std::int16_t , std::int32_t , std::int64_t 의 최댓값
(매크로 상수)
INT_FAST8_MAX INT_FAST16_MAX INT_FAST32_MAX INT_FAST64_MAX
각각 std::int_fast8_t , std::int_fast16_t , std::int_fast32_t , std::int_fast64_t 의 최댓값
(매크로 상수)
INT_LEAST8_MAX INT_LEAST16_MAX INT_LEAST32_MAX INT_LEAST64_MAX
각각 std::int_least8_t , std::int_least16_t , std::int_least32_t , std::int_least64_t 의 최댓값
(매크로 상수)
INTPTR_MAX
(선택적)
std::intptr_t 의 최댓값
(매크로 상수)
INTMAX_MAX
std::intmax_t 의 최댓값
(매크로 상수)
부호 없는 정수 : 최댓값
UINT8_MAX UINT16_MAX UINT32_MAX UINT64_MAX
(선택적)
각각 std::uint8_t , std::uint16_t , std::uint32_t , std::uint64_t 의 최댓값
(매크로 상수)
UINT_FAST8_MAX UINT_FAST16_MAX UINT_FAST32_MAX UINT_FAST64_MAX
각각 std::uint_fast8_t , std::uint_fast16_t , std::uint_fast32_t , std::uint_fast64_t 의 최댓값
(매크로 상수)
UINT_LEAST8_MAX UINT_LEAST16_MAX UINT_LEAST32_MAX UINT_LEAST64_MAX
각각 std::uint_least8_t , std::uint_least16_t , std::uint_least32_t , std::uint_least64_t 의 최댓값
(매크로 상수)
UINTPTR_MAX
(선택적)
std::uintptr_t 의 최댓값
(매크로 상수)
UINTMAX_MAX
std::uintmax_t 의 최댓값
(매크로 상수)

최소 너비 정수 상수를 위한 함수 매크로

INT8_C INT16_C INT32_C INT64_C
인수로 지정된 값을 가지며, 그 타입이 각각 승격된 std::int_least8_t , std::int_least16_t , std::int_least32_t , std::int_least64_t 타입인 정수 상수 표현식으로 확장됨
(함수 매크로)
INTMAX_C
인수로 지정된 값을 가지며, 타입이 std::intmax_t 인 정수 상수 표현식으로 확장됨
(함수 매크로)
UINT8_C UINT16_C UINT32_C UINT64_C
인수로 지정된 값을 가지며, 그 타입이 각각 승격된 std::uint_least8_t , std::uint_least16_t , std::uint_least32_t , std::uint_least64_t 타입인 정수 상수 표현식으로 확장됨
(함수 매크로)
UINTMAX_C
인수로 지정된 값을 가지며, 타입이 std::uintmax_t 인 정수 상수 표현식으로 확장됨
(함수 매크로)
#include <cstdint>
UINT64_C(0x123) // uint_least64_t 타입의 리터럴로 확장되며 값은 0x123

형식 매크로 상수

헤더 파일에 정의됨 <cinttypes>

std::fprintf 함수 계열을 위한 형식 상수

여기에 나열된 각 PRI 매크로는 구현이 해당 typedef 이름을 정의하는 경우에만 정의됩니다.

int 또는
unsigned int
대한 동등 표현
설명 자료형 매크로




std::int x _t




std::int_least x _t
std::int_fast x _t
std::intmax_t
std::intptr_t
d 부호 있는 10진 정수 값 출력 PRId x PRIdLEAST x PRIdFAST x PRIdMAX PRIdPTR
i PRIi x PRIiLEAST x PRIiFAST x PRIiMAX PRIiPTR
u 부호 없는 10진 정수 값 출력 PRIu x PRIuLEAST x PRIuFAST x PRIuMAX PRIuPTR
o 부호 없는 8진 정수 값 출력 PRIo x PRIoLEAST x PRIoFAST x PRIoMAX PRIoPTR
x 부호 없는 소문자 16진 정수 값 출력 PRIx x PRIxLEAST x PRIxFAST x PRIxMAX PRIxPTR
X 부호 없는 대문자 16진 정수 값 출력 PRIX x PRIXLEAST x PRIXFAST x PRIXMAX PRIXPTR

std::fscanf 함수 계열을 위한 std::fscanf 형식 상수

여기에 나열된 각 SCN 매크로는 구현이 해당 typedef 이름을 정의하고 해당 타입에 적합한 std::fscanf 길이 수식자를 가질 경우에만 정의됩니다.

int 또는
unsigned int 에 해당
설명 자료형 매크로




std::int x _t




std::int_least x _t
std::int_fast x _t
std::intmax_t
std::intptr_t
d 부호 있는 10진 정수 값 입력 SCNd x SCNdLEAST x SCNdFAST x SCNdMAX SCNdPTR
i 부호 있는 정수 값 입력 SCNi x SCNiLEAST x SCNiFAST x SCNiMAX SCNiPTR
u 부호 없는 10진 정수 값 입력 SCNu x SCNuLEAST x SCNuFAST x SCNuMAX SCNuPTR
o 부호 없는 8진 정수 값 입력 SCNo x SCNoLEAST x SCNoFAST x SCNoMAX SCNoPTR
x 부호 없는 16진 정수 값 입력 SCNx x SCNxLEAST x SCNxFAST x SCNxMAX SCNxPTR

참고 사항

C++는 문자열 리터럴 바로 뒤에 오는 문자를 사용자 정의 문자열 리터럴 로 해석하기 때문에, printf ( "%" PRId64 " \n " ,n ) ; 와 같은 C 코드는 C++에서 유효하지 않으며 PRId64 앞에 공백이 필요합니다.

C99 표준은 C++ 구현체가 위의 한계, 상수 또는 형식 매크로들을 해당 매크로들 __STDC_LIMIT_MACROS , __STDC_CONSTANT_MACROS 또는 __STDC_FORMAT_MACROS (각각)가 관련 C 헤더( stdint.h 또는 inttypes.h )를 포함하기 전에 정의되지 않은 경우 정의하지 않을 것을 권고합니다. 이 권고는 어떤 C++ 표준에도 채택되지 않았으며 C11에서 제거되었습니다. 그러나 일부 구현체(예: glibc 2.17)는 이 규칙을 적용하려 시도하며, __STDC 매크로들을 정의해야 할 수 있습니다; C++ 컴파일러들은 일부 상황에서 이를 자동으로 정의함으로써 이 문제를 우회하려 시도할 수 있습니다.

std::int8_t signed char 일 수 있고 std::uint8_t unsigned char 일 수 있지만, 둘 다 부호 여부와 관계없이 char 가 될 수 없습니다 ( char 는 "부호 있는 정수 타입"이나 "부호 없는 정수 타입"으로 간주되지 않기 때문입니다).

예제

이 예제에서 사용된 형식 매크로 앞의 공백에 관한 참고 사항 도 참조하십시오.

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

가능한 출력:

8
lld
-9223372036854775808
+9223372036854775807
+7

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 2820 C++11 선택적 typedef 이름 및 매크로에 대한 요구사항이 C와 일치하지 않았음 일관성 있게 수정됨

참조문헌

  • C++23 표준 (ISO/IEC 14882:2024):
  • 17.4.1 헤더 <cstdint> 개요 [cstdint.syn]
  • 31.13.2 헤더 <cinttypes> 개요 [cinttypes.syn]
  • C++20 표준(ISO/IEC 14882:2020):
  • 17.4 정수 타입 [cstdint]
  • 29.12.2 헤더 <cinttypes> 개요 [cinttypes.syn]
  • C++17 표준 (ISO/IEC 14882:2017):
  • 21.4 정수 타입 [cstdint]
  • 30.11.2 헤더 <cinttypes> 개요 [cinttypes.syn]
  • C++14 표준(ISO/IEC 14882:2014):
  • 18.4 정수 형식 [cstdint]
  • 27.9.2 C 라이브러리 파일 [c.files]
  • C++11 표준(ISO/IEC 14882:2011):
  • 18.4 정수 형식 [cstdint]
  • 27.9.2 C 라이브러리 파일 [c.files]

참고 항목

C documentation for Fixed width integer types