C语言中, 函数 int abs(int num); 用于求整数的绝对值, 位于头文件 <math.h>, 返回值为参数 num 的绝对值。
今天来看一下这个函数有几种实现方式呢
一、利用 “-” (负号)运算符
负号运算符可用于得到操作数的相反数
因此,可以参考如下实现 :
int _abs(int num)
{
return num < 0 : -num : num;
}
二、利用整数的存储原理
我们知道,正负数在内存中已补码形式存储,而正负数的补码规则如下:
1、正数的补码和原码相同
2、负数的补码是:除符号位(首位不变)外,对原码的各位取反,即对该负数对应的正数的原码进行取反,再在最后一位+1。
因此,我们可以利用负数的补码规格,将负数的补码逆转换为原码,存储到内存中,即转换成了正数
参考如下实现
int _abs(int num)
{
if (num < 0) {
/* 负数补码先减一, 再取反, 得到原码, 即正数 */
return ~(--num);
}
return num;
}
此外,还有其他巧妙的技巧可以实现 abs 函数,欢迎在评论区交流