2013-11-14 3 views
2

저는 C++ 개발자가 아니지만 오늘 C++ 코드를 발견하고 그것을 이해하려고 노력했습니다. 그래서 나는이 코드 조각에 쌓인했습니다C++ 캐스팅 int double double

int m = 2, n = 3, i = 1; 
double mid = (double)m/n * i; 
int d = (int)mid + 1; 

printf("%d %d\n", mid, d); 

콘솔에 인쇄 될 것입니다 결과는 다음과 같습니다 1,431,655,765 1071994197. 두 배로 변수 m의 캐스팅과 관련이있는 것 같다,하지만 난 그것이 어떻게 일어나고 있는지 전혀 모른다. 나는 그것을 이해할 수 있도록 누군가가 필요하다. 미리 감사드립니다!

+0

제목이 정말 무엇과 일치하지 않는 것, 당신이 즉 기대 인쇄됩니다

printf("%f %i\n", mid, d); 

에의 printf 변경. – dbliss

+0

[여기] (http://www.cplusplus.com/doc/tutorial/typecasting/)는 형식 변환에 관한 문서 페이지입니다. – dbliss

+0

C++? 구식'(double) m 대신에'static_cast (m)'을 사용하는 것이 더 좋다. – Anubis

답변

4

%lf 형식 지정자가있는 이중 (mid)을 인쇄해야합니다.

+3

출력을위한 포맷 지시자는'% f'이어야한다; float는 생략 부호를 통과 할 때 double로 승격되기 때문에 float 및 double에 모두 적용됩니다. '% lf '은 (는) 유효하지 않습니다. 'scanf '의 경우'% f '는 float을 의미하고,'% lf '은 double을 의미하고'% Lf '는 long double을 의미합니다. –

1

실제로이 질문의 0.666667 1