c·c++/c 프로그래밍

float 입출력에 관한 질문

바로이순간 2012. 3. 29. 10:53

#include<stdio.h>

int main(void) {

  float a;

  scanf("%d", &a);

  printf("%d \n, a);

  return 0;

}


C공부하고 있는데요. 원래 위의 경우 float형으로 변수 a를 선언할 경우 입출력을 %f로 해야 하는데,

위와 같이 %d 정수형으로 입출력 하도록 프로그래밍할 경우 제대로된 값이 안나오자나요.

예를 들어 10을 입력 결과가 0으로 나옴


이 경우 실제 메모리가 어떻게 할당되고 어떻게 쓰여져서 왜 0이 나오는지 알려주세요.

처음에 변수 a가 float형으로 4byte가 할당되고, 입력을 int로 4byte로 입력받으면,

10을 입력한 경우, 00000000 00000000 00000000 00001010으로 2진수로 입력되고 

그다음이 어떻게 되서 0으로 출력되는 걸까요???


---------------------------------------------------------------------------

처음에 scanf문에 의해서 정수방식으로 읽어들입니다.

그런데 컴파일러는 무책임하면 안되기 때문에 읽어들인 값을 float형으로

다시 저장을 하는 과정을 거칩니다.


이때 정수형으로 읽은 방식이 float형으로 볼때는 정의가 안되는 값이 됩니다.

이런경우 모든 비트가 0인 값으로 저장을 합니다. (무의미한 수라는 뜻입니다.)

이를 정수로 출력하면 0이 출력이 됩니다.


위를 확인하기 우해서 float형으로 의미가 있는 수가 되는 경우의 

아주 큰수를 입력하면 나중에 찍을때 어떤 수가 찍히는 것을 볼수 있습니다.

한번 실험해 보시기 바랍니다. [예: 123456789]