오후에 올렸는데 float형 완전 잘 가르쳐줘서 풀었는데..
#include
int main(int argc, char **argv)
{
double b = 0.75;
unsigned int *pB = (unsigned int*)&b;
printf("%f\nx\nx\n", b, *pB, *(pB + 1));
}
값이 0.75000 / 00000000 / 3fe8000 나오는데
0.75000이야 알고, 00000000은 unsigned int가 32비트 뿐이 출력안돼서 부동소수 가수부 뒤에 32개 하면 전부 0이어서 그런줄 알겠는데,
*(pB+1)가 어떻게 3fe8000나와??? 포인터 연산이 어떻게 되는지 잘모르겠어..
걍 pB는 주소고 (pB+1)은 pB에서 타입 사이즈만큼, 그니까 4바이트 뒤의 주소임. 그래서 *(pB+1)는 double 데이터b의 msb 4바이트 값임. 그니까 실제로 b 안에는 3fe8000 00000000 이 들어있는거지. 왜 순서가 반대냐면 little endian이라서
뭔말인지 잘모르겠는데.. 이거 부동소수점 문제 아니야?? 그니까 왜 b값에 3fe8000이 들어있어??