有符号数,取绝对值后再赋值给有符号数,会有bug吗?

2020-01-21 21:30发布

int ia,ib;
long la;
..........
ia = abs(ia);
ib = abs(ib);
la= ia+ib;
........

本意是要得到 ia与ib的绝对值之和,这样能得到正确的结果吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
20条回答
modbus
1楼-- · 2020-01-22 10:43
 精彩回答 2  元偷偷看……
gmajvfhpa
2楼-- · 2020-01-22 14:35
lans0625 发表于 2015-1-10 11:17
什么问题?说说看,不要卖关子。。。。

int 范围是-32768~32767 ,当变量是-32768取正时,是 +32768,int变量存不了这个数
agilityChen
3楼-- · 2020-01-22 20:21
lans0625 发表于 2015-1-10 11:08
我觉得没问题,难道还得有个绝对值专用的绝对值数据类型?

问题大得很。
每一句代码都有问题:
(1) ia = abs(ia); ib = abs(ib);
如果ia或ib为-32768,取绝对值再赋值给int型,直接溢出。
(2) la= ia+ib;
(ia + ib)的类型是int,赋值给Ia时,才转为long。
如果ia + ib已经超过32767或者-32768,就溢出了。
改为Ia = (long)ia + ib才不会有问题。
SealedGhost
4楼-- · 2020-01-23 00:52

tmp.png (11.87 KB, 下载次数: 0)

下载附件

2015-1-10 11:43 上传


lz的出的是什么问题呀
zhenghe
5楼-- · 2020-01-23 03:01
lans0625
6楼-- · 2020-01-23 07:55
 精彩回答 2  元偷偷看……

一周热门 更多>