wnsgurl97   3년 전

결론적으로 보았을 때,

double형의 정수를 int형의 정수로 나누었을 때는 정답처리가 됬으나,

int형의 정수를 double형의 정수로 나누었을 때는 오답처리가 됬습니다.

혹시 이것에 대해서 이유를 아시는 분이 계시면 질문 왜 결과가 다른 것인지 여쭤보고 싶습니다!

jaehoo1   3년 전

연산 순서를 생각하시면 됩니다.

14번과 32번 줄에 있는 연산자를 생각해보면 괄호연산이 가장 빨리되고,

그 다음으론 * / 가 순서대로 되겠죠.

14번줄부터 보면 제일 먼저 MAX를 (double)로 형변환 합니다.

그 다음 연산은 sum*100을 하겠죠. 이 때 sum과 100은 둘 다 int죠

sum*100 역시 int가 됩니다.

그 다음으론 sum*100 을 num과 / 연산 하겠네요.

sum*100은 위에서 말한대로 int고, num 역시 int 입니다.

sum*100/num 의 결과는 int가 됩니다.

몫만 남고 나머지(소수점)는 버려지겠네요.

이 이후에 (double)MAX를 만나므로, 이 때 형변환을 한다 하더라도

이미 버려진 소수점은 돌아오지 않습니다.

32번줄은 제일 먼저 sum을 (double)로 형변환 합니다.

그 다음에는 sum*100을 하지만, sum이 double이니

100이 double로 자동 형변환됩니다.

이후의 식들도 int의 값들이 다 double로 형변환 됩니다.

https://ideone.com/W8sDMj

쉬운 예시를 하나 드립니다.

댓글을 작성하려면 로그인해야 합니다.