abs()库函数原型
- 返回类型:int
- 引用头文件:
#include<stdlib.h>
或者#include<math.h>
作用
- 作用:求一个数的绝对值
实例
#include<stdio.h> #include<math.h> int main() { int n1 = -1; double n2 = -3.14; printf("%d %d", abs(n1), abs(n2)); return 0; } 复制代码
参数不是int类型,而是其它类型,虽然可以通过,但是会报警告
模拟实现abs()函数
思路
基础知识1.
首先: tmp = n >> 31
若n为正数:tmp的结果为0
若n为负数:tmp的结果为-1
基础知识2
算术右移 -当前VS2019:采取的是算术右移,右边舍弃,左边补符号位0
最高位为符号位 正数:0 负数:-1 所以如果是正数:最高位为0,右移补符号位0 右移31位结果:00000000 00000000 00000000 00000000 ->0 如果是负数 :最高位为1,右移补符号位1 右移31位结果:11111111 11111111 11111111 11111111 ->-1 补码为全1序列 10进制代表的值为-1
代码
int my_pow(int n) { int tmp = n >>31; //正数:tmp = 0 负数:tmp = -1 return (n ^ tmp) - tmp; } int main() { int n = 0; scanf("%d",&n); int ret = my_pow(n); printf("%d\n",ret); return 0; } 复制代码
代码分析
int tmp = n >>31; //正数:tmp = 0 负数:tmp = -1 return (n ^ tmp) - tmp; 复制代码
- 若n为正数:tmp = 0 n ^tmp 还是n ( 因为0^a = a )
n^tmp - tmp = n - 0 = n**
- 若n为负数: tmp = -1