inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

3.11 부동소수점형

float f5, double d5

207

양주원

작성한 질문수 21

1

16진수 0x1.1p1에서 0xb.ap1로 바뀌는 게 대응하는 문자라서 그런 건가요? 같은 1인데 왜 바뀌는 문자가 다른지 모르겠어요.

f5와 d5를 출력할 때 %a는 정수 출력할 때 %d와 똑같은 역할인가요?

그리고 f5와 d5를 출력했을 때 나오는 수를 어떻게 해석하는 건지 잘 모르겠습니다.

 

c

답변 1

1

Soobak

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

 

강의 21:34 부분에서 float f5 = 0x1.1p1;float f5 = 0xb.ap1 으로 변경하는 부분은,
C언어에서 부동소수점 숫자의 16진수 표기 이해를 위한 예시입니다.
즉, 같은 1을 다른 문자로 바꾸는 것이 아니라, 16진수 표기법으로 '숫자' 가 아닌 '문자' 로도 값을 표현할 수 있는 것에 대한 예시를 들어주신 것입니다.

 

덧붙여 설명드리면, 16진수 부동소수점 표현 방식은 접두사 0x 로 시작하여, 16진수 숫자(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f) 가 오고, p 또는 P 로 '지수' 부분이 시작됩니다.
이 때, 지수 부분은 2 의 거듭제곱을 의미합니다.
예를 들어, 0x1.1p 은 16진수 1.12의 1승 을 곱한 값으로, 10진수로는 1.0625 * 2 ^ 1 = 2.125 가 됩니다.
(당연히 아직 익숙하지 않은 내용이실 것이므로, 가볍게 들어만 두시고 편하게 이어서 진도를 나아가시는 것을 개인적으로 권장 드립니다.)

int main()
{
  float f5 = 0x1.1p1;
  printf("\n");
  printf("f5 출력 결과 : %f\n", f5);
  printf("\n");

  return 0;
}

image

%a 에 대해 이해하신 내용도 맞습니다.
printf() 함수에는 '형식 지정자' 라는 것이 존재하는데요, 변수의 자료형과 출력하려는 '형식' 따라서 다양한 형식 지정자들이 존재합니다.
이 때, %a 는 '부동소수점 수' 를 '16진수' 형태로 출력하는 데 사용되는 형식지정자 입니다.
질문자님께서 말씀해주신 %d 역시 '정수' 를 '10진수' 형태로 출력하기 위해 사용하는 형식지정자 입니다.

즉, 둘은 printf() 함수에서 '형식 지정자' 라는 같은 역할을 합니다.

 

이어서, f5d5 를 출력할 때, %a 를 사용하면 해당 값들이 '부동 소수점 수' 로 해석되어 '16진수' 형태로 출력됩니다.
출력 결과는 위에서 설명드린 것과 같습니다.
0x 다음은 부동소수점 수의 가수부, p 다음은 '2 의 거듭제곱 지수' 를 나타냅니다.

Export template 안됨

1

19

2

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

1

54

3

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

1

56

2

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

1

54

2

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

1

49

1

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

1

73

2

12.12 헤더 관련 질문

1

60

2

Visual Studio Community 2026 사용 문의

1

137

2

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

1

61

2

getchar(), putchar()

1

93

3

강의자리ㅛ

1

80

2

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

1

113

2

소스파일안에 여러 파일

1

76

2

F5와 F7의 차이

1

76

2

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

1

58

2

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

1

69

1

Step over 기능 문의

1

53

2

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

1

74

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

61

2

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

1

62

2

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

1

65

2

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

1

53

2

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

1

53

2