>백엔드 개발 >C++ >C/C에서 접두사 0이 0123을 83으로 바꾸는 이유는 무엇입니까?

C/C에서 접두사 0이 0123을 83으로 바꾸는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-11 12:46:02741검색

Why Does a Prefix Zero Turn 0123 into 83 in C/C  ?

숫자 상수와 접두사 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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