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

C에서 앞에 0이 붙은 숫자가 예기치 않게 동작하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-02 22:43:12391검색

Why Do Zero-Prepended Numbers Behave Unexpectedly in C  ?

0이 앞에 붙은 숫자의 특이한 동작 이해

C와 같은 특정 프로그래밍 언어에서는 0이 앞에 붙은 숫자가 예상치 못한 동작을 보이는 경우가 종종 있습니다. 이러한 문제를 이해하기 위해 제시한 특정 시나리오를 자세히 살펴보겠습니다.

다음 코드 발췌 부분을 고려하세요.

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자리 숫자 및 8진수 해석

C에서 정수 리터럴 10진수, 8진수 또는 16진수 기준으로 지정할 수 있습니다. 앞에 0이 붙은 정수는 리터럴이 16진수 기준을 나타내는 0x 또는 0X로 시작하는 경우를 제외하고 일반적으로 8진수 리터럴로 해석됩니다.

예제에서 00016은 8진수 리터럴로 해석되어 i ==가 됩니다. 14. 8진수는 0~7의 숫자를 사용하여 값을 나타냅니다. 선행 0은 리터럴 값에 영향을 주지 않습니다.

마찬가지로 05016도 8진수 리터럴로 해석되며, 이는 각 숫자에 적절한 8승을 곱하여 10진수로 변환할 수 있습니다. 이는 우리에게 i를 제공합니다. == 2574.

선행 0 및 16진수 해석

단, 리터럴이 0x나 0X로 시작하면 16진수 리터럴로 해석됩니다. 16진수는 숫자 0-9와 문자 A-F(또는 a-f)를 사용하여 값을 나타냅니다.

예제에서 0x16은 값 22를 나타내는 16진수 리터럴로 해석됩니다.

8진수 및 구문 오류

C 표준에 따르면 8 및 9는 유효한 8진수가 아닙니다. 따라서 08은 유효하지 않은 8진수 리터럴이며 컴파일 중에 구문 오류가 발생합니다.

결론

앞에 0이 붙은 숫자에서 관찰한 이상한 점은 C에서 정수 리터럴을 해석하기 위한 특정 규칙에서 비롯됩니다. . 이러한 규칙을 이해함으로써(즉, 별도로 지정하지 않는 한 앞에 0이 붙는 정수를 8진수 리터럴로 해석함) 오류를 방지하고 정수 값을 올바르게 처리할 수 있습니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.