이 튜토리얼에서는 C/C++에서 사용되는 정수 리터럴(Integer Literal)의 개념과 함께 접두사(Prefix)와 접미사(Suffix)가 어떻게 활용되는지 자세히 알아보겠습니다.
정수 리터럴이란?
정수 리터럴이란 소스 코드에 직접 작성되는 정수 값을 의미합니다. 예를 들어 213, 0x213A처럼 코드 안에서 그 자체로 값을 나타내는 숫자들이 모두 정수 리터럴입니다.
정수 리터럴은 크게 두 가지 요소로 구성됩니다.
- 접두사(Prefix) – 값의 진법(기수)을 나타냅니다. 예를 들어
0x10은0x라는 접두사를 통해 16진수 값임을 알려줍니다. - 접미사(Suffix) – 값의 자료형(type)을 나타냅니다. 예를 들어
8465484156155LL은LL접미사를 통해 long long 정수임을 의미합니다.
주요 접두사 종류
- 10진수: 접두사 없음 (예:
213) - 8진수:
0으로 시작 (예:0213) - 16진수:
0x또는0X로 시작 (예:0x213A) - 2진수:
0b또는0B로 시작 (C++14부터 지원, 예:0b101)
주요 접미사 종류
- L 또는 l: long형
- LL 또는 ll: long long형
- U 또는 u: unsigned형
- ULL 또는 ull: unsigned long long형
💡 참고: 소문자 l 대신 대문자 L을 사용하는 것이 좋습니다. 일부 폰트에서는 소문자 l이 숫자 1과 혼동될 수 있기 때문입니다.
예제 코드
#include <iostream>
using namespace std;
int main(){
// 접두사 예시
cout << 213 << '\n' // 10진수
<< 0213 << '\n' // 8진수
<< 0x213A << '\n' // 16진수
<< 0b101 << '\n' // 2진수
// 접미사 예시
<< 1234567890123456789LL << '\n' // long long
<< 12345678901234567890ull << '\n' // unsigned long long
<< 12345678901234567890u; // unsigned int
return 0;
}실행 결과
213 139 8506 5 1234567890123456789 12345678901234567890 12345678901234567890
결과 분석
213→ 10진수 그대로 213 출력0213→ 8진수 213을 10진수로 변환하면 139 (2×64 + 1×8 + 3×1 = 139)0x213A→ 16진수 213A를 10진수로 변환하면 85060b101→ 2진수 101을 10진수로 변환하면 51234567890123456789LL→ long long 범위 내의 큰 정수가 정확히 저장됨12345678901234567890ull→ unsigned long long으로 표현 가능한 최대치 근처의 값도 정확히 처리됨
이처럼 접두사와 접미사를 적절히 활용하면 다양한 진법의 숫자와 크기가 다른 정수 자료형을 코드에서 명확하게 표현할 수 있습니다.