Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C/C++ 정수 리터럴 완벽 가이드: 접두사와 접미사 이해하기

이 튜토리얼에서는 C/C++에서 사용되는 정수 리터럴(Integer Literal)의 개념과 함께 접두사(Prefix)와 접미사(Suffix)가 어떻게 활용되는지 자세히 알아보겠습니다.

정수 리터럴이란?

정수 리터럴이란 소스 코드에 직접 작성되는 정수 값을 의미합니다. 예를 들어 213, 0x213A처럼 코드 안에서 그 자체로 값을 나타내는 숫자들이 모두 정수 리터럴입니다.

정수 리터럴은 크게 두 가지 요소로 구성됩니다.

  • 접두사(Prefix) – 값의 진법(기수)을 나타냅니다. 예를 들어 0x100x라는 접두사를 통해 16진수 값임을 알려줍니다.
  • 접미사(Suffix) – 값의 자료형(type)을 나타냅니다. 예를 들어 8465484156155LLLL 접미사를 통해 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진수로 변환하면 8506
  • 0b101 → 2진수 101을 10진수로 변환하면 5
  • 1234567890123456789LL → long long 범위 내의 큰 정수가 정확히 저장됨
  • 12345678901234567890ull → unsigned long long으로 표현 가능한 최대치 근처의 값도 정확히 처리됨

이처럼 접두사와 접미사를 적절히 활용하면 다양한 진법의 숫자와 크기가 다른 정수 자료형을 코드에서 명확하게 표현할 수 있습니다.