我对如何在定点环境中处理算术计算感到有些困惑。考虑以下代码行:
/* 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 中算术运算本质上不是一样的吗?除了,它分为两个语句?- 我可以期待不同编译器的不同行为吗?