C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[60466] Re:float형을 printf에서 %x로찍으면 안나오네요
Nibble [gameover] 5096 읽음    2010-03-16 14:19
C 언어는 저급 언어입니다.
그닥 복잡한 기능을 제공해주는 게 아니란 의미에서요.

printf("%x", *(int*)&f); 하면 제대로 나올겁니다.
float 형은 4byte짜리 자료형이죠. int도 마침 4바이트입니다.
그래서 &f 로 f의 주소를 넘기고, 주소끼리는 캐스팅이 되니까, int*로 여기게 한 다음, 그 내용을 꺼내면
int 형인듯 자연스레 넘어갑니다.

하지만 float를 바로 던질 경우 type high promotion이 발생합니다.
8byte 실수형인 double로 변해버리죠.

printf(%x %x", f); 를 해 보시면 아실 수 있을겁니다.

%x 옵션을 판독한 printf함수의 내부에서는 스택으로 전달된 인자 중 4바이트 꺼내 16진수로 출력하게 됩니다.
8바이트가 넘어갔고, 부동소수점 표현은 MSB쪽으로 유효비트가 몰려들어있기 땜에, 뒤의 4바이트에서 나오게 되는 것이죠.
물론 double형으로 늘어나면서 지수부의 비트도 살짝 변하게 됩니다.

박연규 님이 쓰신 글 :
: float f=3.5f;
:
: printf("%x",f);
:
: 찍으면 16진수로0x40600000
: 가 안나오고 0이나오네요
:
: 40600000으로 찍어내는방법은 알고있는데
:
: 실수를넣으면 왜 %x로바로 변환이안되는지 궁금하네요 자세한설명부탁드립니다.ㅠ

+ -

관련 글 리스트
60464 float형을 printf에서 %x로찍으면 안나오네요 박연규 1373 2010/03/16
60466     Re:float형을 printf에서 %x로찍으면 안나오네요 Nibble 5096 2010/03/16
60465     %x는 Int형을 찍는 포멧입니다. Frigate 1694 2010/03/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.