#include <stdio.h>
int main() {
printf("[[0.5]] [%d] (%d) <%d> \n",0.5, 7);
printf("[[3.1]] [%d] (%d) <%d> \n",3.1, 11);
printf("[[0.0]] [%d] (%d) <%d> \n",0.0, 13);
return 0;
}
위의 프로그램을 실행하면 아래와 같이 출력이 나온다.
[[0.5]] [0] (1071644672) <7>
[[3.1]] [-858993459] (1074318540) <11>
[[0.0]] [0] (0) <13>
위와 같이 출력이 나오는 이유는 0.5 3.1 0.0 이라는 수들이
내부적으로는 double 형으로 되어 있기 때문에 8 바이트를
차지한다.
그런데 c컴파일러는 무식해서 자기가 찍어야 하는 것이 12바이트
(double형 8 바이트 + 정수형 4 바이트) 라는 것만 알뿐
구체적인 내용은 모르고 있다.
정수형으로 세번 찍으라고 하면 double형을 둘로 잘라서 두번
출력해 준다. 그래서 위와 같이 이해하기 어려운 출력이 나오는
것이다.
하지만 이유를 알고 보면 충분히 설명이 된다.
'c·c++ > c 프로그래밍' 카테고리의 다른 글
큰수 더하기 [간단한 버젼] (0) | 2011.12.08 |
---|---|
이차원 배열을 동적으로 선언하여 사용하기 (0) | 2011.12.08 |
십진수를 이진수로 빠르게 변환하기 (0) | 2011.12.07 |
랜덤키 만들기 (0) | 2011.12.07 |
데이터 파일 읽어오기 (0) | 2011.12.06 |