나는 다음과 같은 문이 작동하는 이유를 이해하려고에 putchar에 상응하는 ASCII로 진수 리터럴 변환 :는 C
putchar(1 + '0');
+ '0'표현은 각각의 ASCII 버전으로 문자 변환 것 같다 (49 이 특별한 경우에) putchar은 주어진 것을 좋아한다.
내 질문에 왜 이렇게 했습니까? 어떤 도움을 주셔서 감사합니다. 나는 또한 잘못된 가정을 한 경우 사과드립니다.
나는 다음과 같은 문이 작동하는 이유를 이해하려고에 putchar에 상응하는 ASCII로 진수 리터럴 변환 :는 C
putchar(1 + '0');
+ '0'표현은 각각의 ASCII 버전으로 문자 변환 것 같다 (49 이 특별한 경우에) putchar은 주어진 것을 좋아한다.
내 질문에 왜 이렇게 했습니까? 어떤 도움을 주셔서 감사합니다. 나는 또한 잘못된 가정을 한 경우 사과드립니다.
이것은 ASCII와 아무 관련이 없습니다. 아무도 ASCII를 언급하지 않았습니다. 이 코드는 가정 무엇
은 시스템의 특성에 모든 숫자가 '0'
에서 '9'
에 연속 된 범위로 표시 인코딩, 그래서 당신은이 문자 '0'
에 오프셋이 해당 숫자의 문자를 얻을 추가하는 경우이다.
C 또는 C++ 컴파일러에서 사용할 수있는 모든 문자 인코딩에는이 속성 (예 : C++의 2.3/3)이 있어야하므로이 코드는 이식 가능합니다.
문자 '0'
에서 '9'
까지 연속적이다. C 표준은이를 보장합니다. ASCII에서
:
'0'
= 48'1'
= 49'2'
= 50등
'0'
단순히 오프셋으로 간주된다.
'0' + 0 = 48
이것은 '0'
입니다.'0' + 1 = 49
이고, 이는 '1'
이다.등
내가 그것에 대해 생각을 멈추지 않았다 같아요. 나는 캐릭터를 추가하는 것이 오프셋을 처리 할 것이라고 생각하지 않았다. 다시 감사합니다. – Hank
@ 행크 : 문자는 정수 값이므로 정수와 같이 산술적으로 사용할 수 있습니다. ('fgetc'와 같은 것은 * 여러분이 요청한 것이 모두'char'라고하더라도 더 일반적인'int'를 돌려주고 싶습니다.) 역방향으로 자신의'atoi'를 쓸 수 있습니다 : 숫자 숫자 'c'의 값은'c - '0 ''입니다 ... –