两个int 型数相乘,如果积超出int型最大表示数,结果怎么取的?
sizeof(int)=4,
在两个GCC和IAR for Arm下面计算出来的结果不同。
GCC是正确的,IAR计算结果不对,请教怎么将下面几行语句移植到IAR下面来
(代码实际就是触摸屏tslib校准算法中一段代码),我把它简化如下:
int a[7];
int aa,bb,cc,dd;
a[0]=111793920;
a[1]=-153434;
a[2]=-57;
a[6]=65536;
aa=412*a[0];
bb=272*a[1];
cc=aa+bb+a[2];
dd=cc/a[6];
GCC编译计算的结果是正确的,输出值aa,bb,cc,dd为:
-63214808 -15504 48563608 741
aa ,bb ,cc 是怎么算出来的,有点不清楚,望高手指点。
在另外一个编译器(IAR for Arm V6.21)同样是上面的值,aa bb cc dd 为:
-1185545216 -32528008 -1218073281 -18586
这个是错误的计算结果
现在要把GCC上面这段代码移到IAR上面去,要求计算结果一样,怎么弄?
这段代码的目的是避免符点运算,将数都放大了65536倍 ,最终再除以65536.
如果不转成浮点,有办法不?
多谢!!