integer_literal — 정수 리터럴
integer_literal — 정수 리터럴 (Integer literal)
**정수 리터럴(integer literal)**은 정수 타입의 값을 표현식에서 직접 사용할 수 있게 해주는 문법이에요.
42, 0xFF, 010, 0b1010 같은 상수를 코드에 직접 적을 때 쓰는 형태예요.
출처: cppreference
본문
문법 (Syntax)
정수 리터럴은 다음과 같은 형태를 가져요.
decimal-literal integer-suffix // (1) 10진
octal-literal integer-suffix // (2) 8진
hex-literal integer-suffix // (3) 16진
binary-literal integer-suffix // (4) 2진 (C++14)
여기서
- decimal-literal(10진) — 0이 아닌 10진 숫자로 시작하고, 그 뒤에 0개 이상의 10진 숫자
- octal-literal(8진) — 숫자 0으로 시작하고, 그 뒤에 0개 이상의 8진 숫자
- hex-literal(16진) —
0x/0X로 시작하고, 그 뒤에 1개 이상의 16진 숫자 - binary-literal(2진) —
0b/0B로 시작하고, 그 뒤에 0개 이상의 2진 숫자 (C++14)
42 // 10진 int
052 // 8진 (10진 42)
0x2A // 16진 (10진 42)
0b101010 // 2진 (10진 42) C++14
**integer-suffix(접미사)**는 리터럴의 타입을 지정해요.
| 접미사 | 타입 |
|---|---|
| (없음) | int, long, long long, 또는 부호 없는 버전 중 값에 맞는 첫 번째 것 |
u / U |
부호 없는(unsigned) |
l / L |
long |
ll / LL |
long long |
z / Z |
std::size_t (C++23) |
0xFFu // unsigned int
1000000000LL // long long
42UL // unsigned long
분리자(separator) '(작은따옴표)를 쓰면 가독성을 높일 수 있어요 (C++14).
1'000'000 // 1000000
0xFFFF'FFFF // 4294967295
정수 리터럴의 타입은 접미사와 값의 크기에 따라 결정되는데, 값이 표현 범위를 넘으면 다음 단계 타입으로 올라가요. 리터럴에 접미사를 붙여 타입을 명확히 하면 오버로드 해석이 깜짝 놀라게 바뀌는 것을 막을 수 있어요.