인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

새싹비빔밥님의 프로필 이미지

작성한 질문수

홍정모의 따라하며 배우는 C언어

7.2 표준 입출력 함수들 getchar(), putchar() 예제

7.2 i = '0'일 때 i++의 계산에 관하여

작성

·

71

1

안녕하세요, 7.2 강의에서 예제 중 20분경 내용에 의문이 생겨 질문 남깁니다.

...

for (int i ='0'; i<= '9'; ++i)

if (ch == i)

ch ='*'

이 부분에서 '0'은 위에 작은 따옴표를 붙였으니 문자일 텐데, 끝에 ++i 의 계산은 character 0의 아스키 코드 값에서 1이 더해진다는 건가요? 문자에 숫자 계산을 하니 조금 헷갈려서 질문 드립니다.

답변 2

1

Soobak님의 프로필 이미지

안녕하세요? 질문&답변 도우미 Soobak 입니다.

 

네, 맞습니다.

for (int i = '0'; i <= '9'; ++i) 에서 '0''9' 는 문자(char)이지만, 말씀하신 내용처럼 내부적으로는 아스키 코드 값을 가집니다.

이 때, 문자 '0' 의 아스키 코드 값은 48 이고, 문자 '9' 의 아스키 코드 값은 57 입니다.
따라서, int i = '0'; 은 사실상 int i = 48; 과 동일합니다.

또한, '0' (48)1 을 더하면, 49 가 되고, 아스키 코드 값 49 는 문자 '1' 을 나타냅니다.
따라서, ++i 연산으로 인해 i'0' -> '1' -> '2' -> ... -> '9' 까지 연속적으로 증가합니다.

즉, 문자 연산처럼 보여도 사실은 정수 연산이 이루어지고 있는 것입니다.

 

1

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 새싹비빔밥님.

작성하신 질문을 보면 C 언어에서 문자형과 숫자형의 연산에 대해 혼란을 겪고 계신 것 같습니다. C 언어는 문자형(char)을 기본적으로 정수형처럼 처리합니다. 실제로 문자에 대한 연산은 아스키(ASCII) 코드 값을 기반으로 수행됩니다. 따라서 '0'처럼 작은 따옴표로 지정된 문자는 아스키 코드 테이블에서 48에 해당합니다.

for 루프의 초기 값 설정에서 int i = '0';은 아스키 코드 값 48로 설정하는 것을 의미합니다. 연산 ++i는 아스키 코드 값에서 1을 더하므로, i는 루프를 순환하며 '0', '1', … '9'로 증가하며 변화합니다. 결국, 숫자 연산과 동일한 방식으로 작동하여 원하는 범위를 쉽게 지정할 수 있게 해줍니다.

유사한 질문이 해결된 게시물도 참고해 보시면 도움이 되실 것 같습니다:
- a++ 설명법

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.