请问:谁知道C语言中abs函数是怎么实现的

来源:百度知道 编辑:UC知道 时间:2024/05/10 19:41:58
想知道abs函数是怎么实现的,不会是用if else语句吧

1.函数的头文件:#include <stdlib.h>
2.函数的原型:int abs (int j);
3.函数说明:abs()用来计算参数j 的绝对值,然后将结果返回。
4.返回值:返回参数j 的绝对值结果。
5.关于abs函数的实现:
(1)带if分支的利用补码特性:
正数的补码和原码相同;负数的补码是:补码=~(其正数的)原码+1。因此如果是负数求绝对值可以:(绝对值)原码=~(补码-1)
int _abs(signed int i)
{
if (i<0)
return ~(--i);
return i;
}

(2)带if分支(判断分支)的传统想法:
正数保持原样,负数取反
int _abs(singed int p)
{
return p>0?p:-p;
}

(3)不带if分支(判断分支)的位运算:

int __cdecl _abs(signed int i)
{
return ((i >> 31) ^ i) - (i >> 31);
}

最简单的可以通过位运算,先判断第一位:0是正数直接等于就行了;1就表示负数,由于采用补码存储,转换时将除首位外的各位先-1再取反,再将首位等于0就行了

楼上正解,用位运算速度也很快