작성
·
144
1
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
의 거듭제곱 지수' 를 나타냅니다.