숫자 상수와 접두사 0의 신비한 힘
C/C에서 숫자 상수 앞에 0? 친숙한 십진수 상수(예: 123)와는 달리 겉보기에 무해해 보이는 이 수정에는 숨겨진 비밀이 숨어 있는 것 같습니다.
이 이상한 동작을 설명하려면 원래 질문의 예를 고려하세요. 값 0123으로 int를 초기화하는 것입니다. 흥미롭게도 인쇄된 결과는 예상한 123이 아니라 예상치 못한 83입니다. 겉으로 보기에 소수인 이 숫자를 무언가로 변환하는 과정에서 무슨 일이 벌어지고 있는 걸까요? 다른가요?
답은 숫자 상수의 수수께끼의 세계에 있습니다. 여기서 접두사 0은 고대의 힘을 담고 있습니다. 기본적으로 C/C의 숫자 리터럴은 10진수(기본 10)로 간주됩니다. 그러나 앞에 0을 붙이면 마술처럼 8진수 상수로 변환되어 컴파일러에게 8진수를 사용하여 해석하도록 신호를 보냅니다.
0123의 경우 각 숫자는 8진수 체계에 따라 해석되어 다음 결과가 나옵니다. 다음 계산:
0 = 0
1 = 1
2 = 2
3 = 3
이 값을 3개 그룹으로 결합하면 다음과 같은 결과가 나옵니다.
012 = 0 8^2 1 8 2 = 66
3 = 3
이 두 값을 추가하면 최종 결과가 나옵니다. 66 3 = 83.
이는 접두사가 0인 경우 관찰되는 예상치 못한 동작을 설명합니다. 이는 숨겨진 메커니즘이 놀랍고 종종 혼란스러운 결과를 드러낼 수 있는 C/C의 복잡한 복잡성에 대한 증거입니다. 따라서 다음에 0이라는 접두사가 붙은 숫자 상수를 만나면 그것이 열리는 8진수 문을 기억하세요. 그러면 컴파일이 덜 이동한 경로를 통과할 수 있습니다.
위 내용은 C/C에서 접두사 0이 0123을 83으로 바꾸는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!