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

kaisendon님의 프로필 이미지
kaisendon

작성한 질문수

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

4.9 printf() 함수가 인자들을 해석하는 과정

printf의 형식지정자 %f는 float 자료형 아닌가요?

작성

·

914

0

 3.1강에서 float 자료형의 저장공간은 4바이트라고 하셨었습니다. 

그런데 강의중 %f의 크기는 8바이트라고 잡고 설명해주시는데요. 

형식지정자 %f는 float가 아닌가요? 저는 %f가 float을 나타내서 4바이트 만큼 읽어들이는 형식지정자라고 생각을했거든요. 

답변 3

1

형식지정자는 뭔가를 읽어들여서 저장하는, 특정한 크기가 있는 공간이 아니라 단지 어떻게, 어떤 형식으로 출력했으면 좋겠다고 pritnf에게 알려주는 일종의 '지시문'입니다. '몇 byte를 읽어들인다' 라기보다는 "%f"는 그냥 입력받은 것을 '부동소수점 형식'으로 출력하라는 지시문일 뿐입니다. printf 는 부동소수점으로 출력하라는 지시를 받으면 8byte로 출력하는 규칙을 가지고 있기 때문에 8byte로 출력을 하는 것이구요! 그래서 "%f"는 float도 받을 수 있고 8byte인 double도 받을 수 있습니다. 둘 다 부동소수점 수이기 때문이에요. 꼭 float만 받으리라는 법은 없습니다. float, double 두 수 모두 %f 로 출력하라는 지시를 받으면 8byte로 출력이 됩니다. 

4byte 혹은 8byte로 읽는다라기 보다는, 단지 입력받은 것을 '부동소수점수로 출력하라는 지시문'이라고 생각해주시면 될 것같습니다. printf는 이 %f 지시문을 읽으면 인자를 8byte 크기의 부동소수점수로 출력해줍니다. 그 인자는 float이 될 수도 있고 double 이 될 수도 있습니다.

0

kaisendon님의 프로필 이미지
kaisendon
질문자

네 그부분은 저도 인지 하고 있습니다. 인자???로 들어온 float은 double로 바뀐다고 했으니까요. 

제가 궁금한점은 형식지정자%f 또한 printf안에서 쓰이면 4바이트만 읽는형식지정자에서 8바이트만큼을 읽어들이는 형식지정자가 되는지입니다. 

0

안녕하세요!

float, double와 같은 부동소수점을 출력할 때 printf는 내부적으로 이들을 8byte인 double로 변환해서 출력합니다. 그래서 %f을 통해 float이 8byte로 변환된 형태로 출력이 됩니다. 해당 강의 2:10 에서 교수님께서 설명해주셨습니다. 

kaisendon님의 프로필 이미지
kaisendon

작성한 질문수

질문하기