Namespaces
Variants

고정 너비 정수 타입 (C++11부터)

출처: ko.cppreference.net
 
 
유틸리티 라이브러리
일반 유틸리티
관계 연산자 (C++20에서 폐기됨)
 
 

타입

헤더 파일에 정의됨 <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>
부호있는 정수 : 비트 폭
INTN_WIDTH
(C++26)(조건부 제공)
std::intN_t의 비트 폭 (N은 일반적으로 8, 16, 32 또는 64)
(매크로 상수)
INT_FASTN_WIDTH
(C++26)(조건부 제공)
std::int_fastN_t의 비트 폭 (N은 일반적으로 8, 16, 32 또는 64)
(매크로 상수)
INT_LEASTN_WIDTH
(C++26)(조건부 제공)
std::int_leastN_t의 비트 폭 (N은 일반적으로 8, 16, 32 또는 64)
(매크로 상수)
INTMAX_WIDTH
(C++26)
std::intmax_t
의 비트 폭(매크로 상수)
INTPTR_WIDTH
(C++26)(조건부 제공)
std::intptr_t
의 비트 폭(매크로 상수)
부호 있는 정수 : 최솟값
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 의 최댓값
(매크로 상수)
부호 없는 정수 : 비트 너비
UINTN_WIDTH
(C++26)(조건부 존재)
std::uintN_t의 비트 너비 (N은 일반적으로 8, 16, 32 또는 64)
(매크로 상수)
UINT_FASTN_WIDTH
(C++26)(조건부 존재)
std::uint_fastN_t의 비트 너비 (N은 일반적으로 8, 16, 32 또는 64)
(매크로 상수)
UINT_LEASTN_WIDTH
(C++26)(조건부 존재)
std::uint_leastN_t의 비트 너비 (N은 일반적으로 8, 16, 32 또는 64)
(매크로 상수)
UINTMAX_WIDTH
(C++26)
std::uintmax_t
의 비트 너비 (매크로 상수)
UINTPTR_WIDTH
(C++26)(조건부 존재)
std::uintptr_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 의 최댓값
(매크로 상수)

함수 매크로

다음 각 매크로에 대해 (조건부 제공)으로 표시된 경우, 구현체는 해당 typedef 이름을 정의하는 경우에만 이 매크로를 정의합니다.

헤더 <cstdint>
에 정의됨INTN
_C
(조건부 제공)std::int_leastN_t형식의 정수 상수 표현식으로 확장되며, 그 값은 인수
에 의해 지정됩니다
(함수 매크로)
INTMAX_Cstd::intmax_t형식의 정수 상수 표현식으로 확장되며, 그 값은 인수
에 의해 지정됩니다
(함수 매크로)UINTN
_C
(조건부 제공)std::uint_leastN_t형식의 정수 상수 표현식으로 확장되며, 그 값은 인수
에 의해 지정됩니다
(함수 매크로)
UINTMAX_Cstd::uintmax_t형식의 정수 상수 표현식으로 확장되며, 그 값은 인수
에 의해 지정됩니다
#include <cstdint>
UINT64_C(0x123) // expands to a literal of type uint_least64_t and value 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