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

박병현님의 프로필 이미지

작성한 질문수

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

16진수 부동소수점 관련

작성

·

748

0

부동소수점 관련 강의를 듣고 있는와중

float a = 0xb.aP1;

printf("%a",a);

로 작성하면 강의에 나온 출력값과 같이 나오는데,

printf("%x, %a",a,a); 로 작성하면 원하는 값이 나오지 않습니다.

왜그런건가요?

답변 3

2

이 부분은 저도 잘 몰랐던 부분이네요. 다시 질문주셔서 감사합니다.
https://stackoverflow.com/questions/7480097/what-happens-to-a-float-variable-when-d-is-used-in-a-printf
C 에서 float를 함수의 인수로 받을 때 8byte double의 형태로 변환하는 것이 표준이라는군요.
때문에 printf("%x %a", a, a) 를 해주게되면 double의 8byte 중에서 4byte가 %x에 들어가고, 나머지 4byte 이후가 %a로 들어가서 출력이 된다고 합니다.

하지만 이상한 값이 출력되는 것이니 사용상에 주의가 필요하겠다. 라고 여기시면 되겠습니다.
그리고... 다음 질문부터는 해당강의에 올려주시고, 강의의 어느부분인지도 함께 적어주세요.

0

박병현님의 프로필 이미지
박병현
질문자

이미 16진수 정수형태로 표현된수는 %x를 이용해 16진수 정수형태로 표현하면 0 이나오는 이유는 뭔가요? 또한 첫번째 식을이용해 출력한 %a 값이랑 두번째 식을 이용한 %a 값이 다른 이유는 뭔가요?

0

%x는 16진수 정수의 형태로 출력, %a는 16진수 부동소수점의 형태로 출력하라는 의미입니다.
4.7 강의에서도 확인할 수 있습니다.