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

정현준님의 프로필 이미지
정현준

작성한 질문수

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

2.6 printf() 함수의 기본적인 사용법

Printf 함수질문

작성

·

285

0

공부하다가 잠시 의문점을 갖게 된 부분이있습니다,, 구글링을 해봐도 못찾아서 도움을 받으려고 왔습니다

Printf함수에 대해 질문하고싶은데

저가 보는 책(이것이 c언어다)에서,

Printf함수가 기본적으로 문자열을 출력하는 함수이고, 정수와 실수를 printf함수로 출력하려면 실제 아스키코드값형태의 문자로 변환시켜야 출력이 가능하고

그래서 정수나 실수를 printf로 찍을때는 변환문자가 필요하고 이 변환 문자를 사용하라고 나와있습니다

Int a=10;

Printf(“%d”,a);

하면 원래 a의 대이터 10은 이진수로 

00000000 00000000 00000000 00001010

이렇게 저장되있는데

이러한 이진수가 printf (“%d”)로 출력하면

1번째 질문

%d때문에 아스키코드로 변환하는 과정이 나온다음 문자인10이 화면에 출력된다는건가요?

즉 아스키코드가 ‘0’이 48이고

‘1’이 49인데

메모리에 저장된 이진수들이 %d로 인해서 아스키코드로 변환하는 과정을 거치고 그과정의 결과가 49 48로 나와서 문자열 10이 나오는건가요??

저가 이해한게 맞나요? ㅠㅠ

답변 1

2

안녕하세요!

저도 질문자님의 글을 읽고 한 시간 동안 열심히 찾아봤는데 printf 가 문자열로서 콘솔 화면에 출력시켜주는 함수인 것은 맞지만 정수와 실수가 아스키코드 형태로 변환되어 화면에 출력되는 것인지, 그리고 화면에 출력되는 원리가 무엇인지는 저도 알아내지 못했습니다. ㅠㅠ

1,2,3 같은 한 자리 숫자, \n 같은 제어 문자, a b c 같은 '1개의 문자'들을 어떠한 정수 값에 대응시켜 인코딩 해놓은게 아스키코드인데 printf 함수 사용시 정수와 실수가 아스키코드를 통해 문자열로 변환된다는게 저도 처음 듣는 이야기이며 그에 대한 정보를 찾기가 힘드네요 ㅠㅠ 

질문자님께서 주신 질문이 어떻게보면 "printf 함수를 통해 정수와 실수가 어떤 원리로 모니터 화면에 그려지느냐"와 같은 출력 원리에 관련된 질문이라고 생각합니다. 화면에 출력해주는 일은 실제적으론 운영체제가 해주는 일이기 때문에 질문 주신 부분은 로우한 영역이라고 생각 됩니다. 그래서 사실 개발자가 그 원리를 반드시 알고 있어야 할 필요는 없다고 조심스레 생각됩니다.

정 궁금하시다면 한 번 그 책의 저자분께 메일을 통해 직접 여쭤보는 것이 어떨까요?

아스키코드 얘기는 없지만 질문자님께 도움이 될까 싶어 printf 의 내부적인 동작 원리에 관한 자료 링크 첨부해봅니다.

printf 함수를 직접 구현해보신 분의 코드

C/C++ 박수현 지음 프로그래머가 몰랐던 프로그램의 동작 원리 책의 일부분

정현준님의 프로필 이미지
정현준

작성한 질문수

질문하기