10.3 정수 리터럴 접미사 사용하기

리터럴의 크기를 명확하게 표현하기 위해 접미사(suffix)를 사용할 수도 있습니다. 다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.

integer_literal_suffix.c

#include <stdio.h>

int main()
{
    printf("%ld\n", -10L);                       // long 크기의 정수 리터럴
    printf("%lld\n", -1234567890123456789LL);    // long long 크기의 정수 리터럴

    printf("%u\n", 10U);                         // unsigned int 크기의 정수 리터럴
    printf("%lu\n", 1234567890UL);               // unsigned long 크기의 정수 리터럴

    printf("%lu\n", 10UL);                       // unsigned long 크기의 정수 리터럴
    printf("%llu\n", 1234567890123456789ULL);    // unsigned long long 크기의 정수 리터럴

    return 0;
}

실행 결과

-10
-1234567890123456789
10
1234567890
10
1234567890123456789

변수를 선언할 때는 long, long long, unsigned long처럼 정수 자료형으로 크기를 정할 수 있지만 리터럴은 접미사를 활용하여 크기를 명시적으로 표기합니다.

표 10‑1 정수 리터럴 접미사
접미사 자료형
생략 int
l, L long
u, U unsigned int
ul, UL unsigned long
ll, LL long long
ull, ULL unsigned long long

접미사는 대문자, 소문자를 모두 사용할 수 있으며 l u를 조합하여 크기와 부호 유무를 표현합니다(대소문자를 섞어 쓸 수 있습니다). 접미사를 생략하면 int 크기가 됩니다.

10진수뿐만 아니라 8진수와 16진수에도 접미사를 사용할 수 있습니다.

integer_literal_oct_hex_suffix.c

#include <stdio.h>

int main()
{
    printf("0%lo\n", 017L);             // long 크기의 8진 정수 리터럴
    printf("0%lo\n", 017UL);            // unsigned long 크기의 8진 정수 리터럴
    printf("0x%lX\n", 0x7FFFFFL);       // long 크기의 16진 정수 리터럴
    printf("0x%lX\n", 0xFFFFFFFFUL);    // unsigned long 크기의 16진 정수 리터럴

    return 0;
}

실행 결과

017
017
0x7FFFFF
0xFFFFFFFF

접미사를 붙이는 방법은 10진수와 같습니다.