float f5, double d5
207
작성한 질문수 21
16진수 0x1.1p1에서 0xb.ap1로 바뀌는 게 대응하는 문자라서 그런 건가요? 같은 1인데 왜 바뀌는 문자가 다른지 모르겠어요.
f5와 d5를 출력할 때 %a는 정수 출력할 때 %d와 똑같은 역할인가요?
그리고 f5와 d5를 출력했을 때 나오는 수를 어떻게 해석하는 건지 잘 모르겠습니다.
답변 1
1
안녕하세요, 질문&답변 도우미 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.1 에 2의 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;
}
%a 에 대해 이해하신 내용도 맞습니다.printf() 함수에는 '형식 지정자' 라는 것이 존재하는데요, 변수의 자료형과 출력하려는 '형식' 따라서 다양한 형식 지정자들이 존재합니다.
이 때, %a 는 '부동소수점 수' 를 '16진수' 형태로 출력하는 데 사용되는 형식지정자 입니다.
질문자님께서 말씀해주신 %d 역시 '정수' 를 '10진수' 형태로 출력하기 위해 사용하는 형식지정자 입니다.
즉, 둘은 printf() 함수에서 '형식 지정자' 라는 같은 역할을 합니다.
이어서, f5 와 d5 를 출력할 때, %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





