Fixed width integer types (since C++11)
목차 |
타입
|
헤더 파일에 정의됨
<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
|