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...
C에서 정수 리터럴 10진수, 8진수 또는 16진수 기준으로 지정할 수 있습니다. 앞에 0이 붙은 정수는 리터럴이 16진수 기준을 나타내는 0x 또는 0X로 시작하는 경우를 제외하고 일반적으로 8진수 리터럴로 해석됩니다.
예제에서 00016은 8진수 리터럴로 해석되어 i ==가 됩니다. 14. 8진수는 0~7의 숫자를 사용하여 값을 나타냅니다. 선행 0은 리터럴 값에 영향을 주지 않습니다.
마찬가지로 05016도 8진수 리터럴로 해석되며, 이는 각 숫자에 적절한 8승을 곱하여 10진수로 변환할 수 있습니다. 이는 우리에게 i를 제공합니다. == 2574.
단, 리터럴이 0x나 0X로 시작하면 16진수 리터럴로 해석됩니다. 16진수는 숫자 0-9와 문자 A-F(또는 a-f)를 사용하여 값을 나타냅니다.
예제에서 0x16은 값 22를 나타내는 16진수 리터럴로 해석됩니다.
C 표준에 따르면 8 및 9는 유효한 8진수가 아닙니다. 따라서 08은 유효하지 않은 8진수 리터럴이며 컴파일 중에 구문 오류가 발생합니다.
앞에 0이 붙은 숫자에서 관찰한 이상한 점은 C에서 정수 리터럴을 해석하기 위한 특정 규칙에서 비롯됩니다. . 이러한 규칙을 이해함으로써(즉, 별도로 지정하지 않는 한 앞에 0이 붙는 정수를 8진수 리터럴로 해석함) 오류를 방지하고 정수 값을 올바르게 처리할 수 있습니다.
위 내용은 C에서 앞에 0이 붙은 숫자가 예기치 않게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!