inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

1184

kaisendon

작성한 질문수 15

0

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

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

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

c

답변 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

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

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

0

안소

안녕하세요!

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

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

50

3

main 함수에서 왜 int만 선언이 되는걸까요

1

54

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

53

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

46

1

프로토타입과 함수간의 인자 불일치

1

72

2

12.12 헤더 관련 질문

1

59

2

Visual Studio Community 2026 사용 문의

1

136

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

59

2

getchar(), putchar()

1

92

3

강의자리ㅛ

1

78

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

112

2

소스파일안에 여러 파일

1

75

2

F5와 F7의 차이

1

75

2

c = TWO * (a+b); 에서 a와 b는?

1

58

2

; 세미콜론을 붙이는 기준에 문의

1

68

1

Step over 기능 문의

1

52

2

2.6 강의 따옴표 출력 규칙 문의

1

74

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

60

2

11.7 함수를 구현해 봤습니다.

1

62

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

64

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

53

2

11.6 fit_str함수를 구현해 봤습니다.

1

53

2

11.5 코드 구현

1

67

2