求绝对值,慎用C标准库abs函数

C库函数abs,声明如下:
int abs(int n);

在32位程序中,
int的范围是: -2147483648~2147483647
其中 -2147483648 的绝对值2147483648超过了int的表示范围.

那么: abs(-2147483648) == ?

大家不妨自己测试下.

如果声明为:
unsigned int abs(int n);
那么这个函数和其他int进行运算,则可能会将其自动转换成unsigned int,
真是两难的处境.

char, short, long 与此类似, 我们需要自己保证参数不是这个特殊值.
建议在处理的时候始终将结果转换成unsigned, 来避免这个问题.
例如 unsigned int y = (unsigned int)abs(x);

这篇文章也是描述这个问题:
http://www.cnblogs.com/soloist/archive/2008/04/15/60517.html

http://blog.csdn.net/soloist/article/details/153123

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值