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

정수 리터럴의 타입은 접미사와 값의 크기에 따라 결정되는데, 값이 표현 범위를 넘으면 다음 단계 타입으로 올라가요. 리터럴에 접미사를 붙여 타입을 명확히 하면 오버로드 해석이 깜짝 놀라게 바뀌는 것을 막을 수 있어요.

더 알아보기 (Learn more)

cppreference