2020-01-21 21:30发布
agilityChen 发表于 2015-1-10 11:40 问题大得很。 每一句代码都有问题: (1) ia = abs(ia); ib = abs(ib);
最多设置5个标签!
把
la= ia+ib;
改成
la = ia;
la += ib;
ia+ib比int最大正值大的时候会溢位,这时不是用long运算。
int ia,ib;
unsigned int ua,bu;
long la;
..........
ua = abs(ia);
ub = abs(ib);
la= ua+ub;
........
“(2) la= ia+ib;
(ia + ib)的类型是int,赋值给Ia时,才转为long。
如果ia + ib已经超过32767或者-32768,就溢出了。
改为Ia = (long)ia + ib才不会有问题。”
在CW下试了一下,没有发现这个问题,就算超过了范围, ia+ib和 (long)ia + ib的结果是一样的。
一周热门 更多>