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

C++에서 숫자 앞에 붙는 0(영)의 의미 – 8진수 리터럴 완벽 이해하기

C/C++에서 숫자 맨 앞에 붙는 0(영)은 해당 숫자가 8진수(octal) 리터럴임을 나타내는 표기법입니다.

즉, 실제 숫자 앞에 0을 붙여 쓰면 컴파일러는 그 값을 10진수가 아닌 8진수로 해석합니다. 예를 들어 8진수 25를 표현하려면 025처럼 작성해야 합니다.

8진수 리터럴의 기본 규칙

  • 숫자 앞에 0을 하나 붙이면 8진수로 인식됩니다.
  • 각 자릿수는 0부터 7까지만 사용할 수 있습니다. (8이나 9를 쓰면 컴파일 오류 발생)
  • 참고로 0x로 시작하면 16진수, C++14부터는 0b로 시작하면 2진수 리터럴입니다.

예제 코드

#include <stdio.h>
int main() {
    int a = 025;
    int b = 063;
    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

결과 해석

위 예제에서 025는 8진수이므로 10진수로 변환하면 21(2×8 + 5 = 21)이 되고, 06351(6×8 + 3 = 51)이 됩니다. 이처럼 코드상으로는 같은 숫자처럼 보여도 앞에 붙은 0 하나 때문에 전혀 다른 값이 저장될 수 있으므로 주의해야 합니다.

주의할 점

특히 날짜, 시간, 전화번호처럼 앞자리가 0으로 시작하는 데이터를 다룰 때 실수하기 쉽습니다. 예를 들어 int time = 09;처럼 작성하면 9는 8진수에서 유효하지 않은 숫자이므로 컴파일 오류가 발생합니다. 의도치 않은 8진수 해석을 피하려면 불필요한 선행 0을 제거하거나, 문자열 형태로 값을 처리하는 것이 안전합니다.