====================================1번====================================
int a = 0x3C23D70A;
float fTemp = (float)a;
CString sTemp;
sTemp.Format( _T("%f"), fTemp );
AfxMessageBox( sTemp );
====================================2번====================================
int a = 0x3C23D70A;
float* fTemp = (float*)&a;
CString sTemp;
sTemp.Format( _T("%f"), *fTemp );
AfxMessageBox( sTemp );
1번 코드와 2번 코드의 차이점은 변수를 출력하기 위해, 포인터를 사용했느냐 안했느냐의 차이이다.
1번 코드는 int형을 float형으로 이미 형변환을 해버렸기 때문에, float형이 표현하지 못하는 부분(float형은 기본적은 지수와 가수부분으로 나뉜다.)은 잘라진다. 이 이후에 어떠한 형변환을 해도 잘려버린 숫자 부분은 돌아오지 않는다.
2번 코드는 포인터만 넘긴다. 포인터만 넘기기 때문에, 숫자(바이너리)는 그대로 유지가 된다. 다만 출력할 때, 그 숫자들이 float형으로 지수부분과 가수 부분이 맞게 변형되어 재계산되고...따라서 0.01이라는 값이 나오게 된다.
어렵다....-_-;
댓글 없음:
댓글 쓰기