고정 소수점 환경에서 산술 연산이 어떻게 처리되는지 혼란 스럽습니다. 코드의 라인을 다음과 같은 고려 :정수 오버플로는 C에서 어떻게 작동합니까?
/* unsigned short is 16 bit.*/
unsigned short x = 1000;
unsigned short res;
/* Case1: The following yields correct result in res */
res = (x*544/100);
/* Case2: The following yields wrong result in res*/
res = (x*544); /* expected overflow here */
res = res/100;
그래서, 내 질문은 : 그 이유 경우 2 개 수율 잘못된 결과를 볼 수 있습니다. 그러나 - 올바른 결과를 얻는 경우 1에서 컴파일러는 무엇을 수행합니까? - 사례 1에서 산술 연산이 본질적으로 똑같지 않습니까? 이것을 제외하고는 두 문장으로 나뉩니다. - 다른 컴파일러에서 다른 동작을 기대할 수 있습니까?
는 수학는 16 비트 짧은 놓여져 INT-크기 '변수', 아마도 이러한보다 큰 16 비트, 및 (16 비트에 맞지 않음) 후 최종 결과가 이루어되고 . 2의 경우 수학은 'int'에서 여전히 수행되지만 첫 번째 할당은 16 비트에 맞지 않으므로 res에 대한 첫 번째 할당 중에 잘게됩니다. –