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

C/C++에서 숫자 상수 앞에 붙는 0의 의미 – 8진수 표기법 완벽 정리

C나 C++ 코드를 보다 보면 025, 063처럼 숫자 리터럴 앞에 0이 붙어 있는 경우를 종종 볼 수 있습니다. 이 0은 단순한 장식이 아니라, 해당 숫자가 8진수(octal)임을 나타내는 중요한 표기법입니다.

8진수 표기법의 기본 규칙

C/C++에서는 숫자 상수가 0으로 시작하면 컴파일러는 이를 10진수가 아닌 8진수로 해석합니다. 따라서 8진수 값 25를 코드에 사용하려면 반드시 025처럼 앞에 0을 붙여 작성해야 합니다.

참고로, 16진수는 0x 또는 0X 접두사(예: 0x1A)를 사용하고, 2진수는 C++14부터 0b 접두사(예: 0b1010)를 사용할 수 있습니다.

예제 코드

#include <stdio.h>
int main() {
    int a = 025;   // 8진수 25
    int b = 063;   // 8진수 63
    printf("Decimal of 25(Octal) is %d\n", a);
    printf("Decimal of 63(Octal) is %d\n", b);
}

실행 결과

Decimal of 25(Octal) is 21
Decimal of 63(Octal) is 51

결과 해석

출력 결과를 보면 8진수 025는 10진수로 21(2×8 + 5 = 21), 8진수 063은 10진수로 51(6×8 + 3 = 51)로 변환되어 출력됩니다. 즉, 변수에 저장된 실제 값은 우리가 눈으로 본 숫자와 다를 수 있다는 점에 유의해야 합니다.

주의할 점

실무에서 흔히 발생하는 실수 중 하나는 날짜나 시간처럼 자릿수를 맞추기 위해 습관적으로 앞에 0을 붙이는 경우입니다. 예를 들어 월(month)을 나타내는 값에 09라고 쓰면 컴파일 오류가 발생하는데, 8진수에는 숫자 8과 9가 존재하지 않기 때문입니다. 이런 경우에는 불필요하게 0을 붙이지 않도록 주의해야 합니다.