는 C

2012-01-22 3 views
2

나는 다음과 같은 문이 작동하는 이유를 이해하려고에 putchar에 상응하는 ASCII로 진수 리터럴 변환 :는 C

putchar(1 + '0'); 

+ '0'표현은 각각의 ASCII 버전으로 문자 변환 것 같다 (49 이 특별한 경우에) putchar은 주어진 것을 좋아한다.

내 질문에 왜 이렇게 했습니까? 어떤 도움을 주셔서 감사합니다. 나는 또한 잘못된 가정을 한 경우 사과드립니다.

답변

2

이것은 ASCII와 아무 관련이 없습니다. 아무도 ASCII를 언급하지 않았습니다. 이 코드는 가정 무엇

은 시스템의 특성에 모든 숫자가 '0'에서 '9'에 연속 된 범위로 표시 인코딩, 그래서 당신은이 문자 '0'에 오프셋이 해당 숫자의 문자를 얻을 추가하는 경우이다.

C 또는 C++ 컴파일러에서 사용할 수있는 모든 문자 인코딩에는이 속성 (예 : C++의 2.3/3)이 있어야하므로이 코드는 이식 가능합니다.

+0

내가 그것에 대해 생각을 멈추지 않았다 같아요. 나는 캐릭터를 추가하는 것이 오프셋을 처리 할 것이라고 생각하지 않았다. 다시 감사합니다. – Hank

+0

@ 행크 : 문자는 정수 값이므로 정수와 같이 산술적으로 사용할 수 있습니다. ('fgetc'와 같은 것은 * 여러분이 요청한 것이 모두'char'라고하더라도 더 일반적인'int'를 돌려주고 싶습니다.) 역방향으로 자신의'atoi'를 쓸 수 있습니다 : 숫자 숫자 'c'의 값은'c - '0 ''입니다 ... –

0

문자 '0'에서 '9'까지 연속적이다. C 표준은이를 보장합니다. ASCII에서

:

  • '0' = 48
  • '1' = 49
  • '2' = 50

'0' 단순히 오프셋으로 간주된다.

  • '0' + 0 = 48 이것은 '0'입니다.
  • '0' + 1 = 49이고, 이는 '1'이다.