> 백엔드 개발 > C++ > C에서 접두사가 0인 숫자가 예기치 않게 작동하는 이유는 무엇입니까?

C에서 접두사가 0인 숫자가 예기치 않게 작동하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-07 14:50:17
원래의
489명이 탐색했습니다.

Why Do Zero-Prefixed Numbers Behave Unexpectedly in C  ?

접두사가 0인 숫자와 그 중요성 이해

프로그래밍 영역에서 접두사가 0인 숫자는 흥미로운 동작을 보일 수 있습니다. Visual Studio 2013의 예를 사용하여 세부 사항을 살펴보겠습니다.

다음 코드 조각을 고려하세요.

int i = 07;     // i == 7
int i = 16;     // i == 16
int i = 00016;  // i == 14, why?
int i = 05016;  // i == 2574, wow )
int i = 08;     // compile error, compiler expects octal number...
로그인 후 복사

접두사가 0인 숫자의 특수 처리

컴파일러는 접두사가 0인 숫자를 다음에 따라 다르게 해석합니다. context:

  • 십진수(기본 10): 접두사가 0인 숫자가 0부터 7까지의 숫자로만 구성된 경우 십진수로 해석됩니다. 예를 들어 07은 7과 같습니다.
  • 8진수(기본 8): 접두사가 0인 숫자에 숫자 8 또는 9가 포함되어 있으면 8진수로 간주됩니다. 그러나 이는 C 표준에 따르면 잘못된 사용법입니다.
  • 16진수(Base 16): 0x 또는 0X로 시작하는 접두사가 0인 숫자는 16진수로 해석됩니다.

00016과의 비정상적인 행동 05016

과제 int i = 00016; i == 14로 확인됩니다. 이는 C 표준에 따라 유효하지 않더라도 컴파일러가 선행 0을 추가 8진수로 처리하기 때문입니다.

마찬가지로, int i = 05016; 컴파일러가 이를 다음과 같이 해석하기 때문에 i == 2574를 산출합니다.

  • 050은 8진수 50으로 처리됩니다.
  • 16은 10진수 16으로 처리됩니다.
  • 결과 (50 * 8) 16 =으로 계산됩니다. 2574.

08의 컴파일 오류

0으로 시작하는 정수 리터럴 뒤에 0-7 이외의 숫자(예: 08)가 오면 컴파일이 트리거됩니다. 컴파일러는 이 값이 8진수일 것으로 예상하지만 8은 유효한 8진수가 아니기 때문에 오류가 발생합니다. 숫자.

위 내용은 C에서 접두사가 0인 숫자가 예기치 않게 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿