模拟实现abs()

简介: 模拟实现abs()

abs()库函数原型

image.png

  • 返回类型: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;
}
复制代码

image.png参数不是int类型,而是其它类型,虽然可以通过,但是会报警告image.png



模拟实现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


结论:==-n ^ -1 = n-1==      无论n为任意实数(包括0,正负数都满足) 所以 n^tmp - tmp = n



相关文章
|
安全 Linux Go
Linux数据备份与恢复
Linux数据备份与恢复
355 5
|
Linux Android开发 iOS开发
FFmpeg开发笔记(七)欧拉系统编译安装FFmpeg
FFmpeg跨平台支持多系统,包括Linux、macOS、Windows和Android。官方提供[编译指南](https://trac.ffmpeg.org/wiki/CompilationGuide)。在CentOS上,编译涉及安装多个依赖,如NASM、Yasm、libx264、libx265、libfdk_aac等。同样,在EulerOS上,需安装相关工具并分别编译x264、x265和FFmpeg。详细FFmpeg开发内容可参考《FFmpeg开发实战:从零基础到短视频上线》。
512 1
FFmpeg开发笔记(七)欧拉系统编译安装FFmpeg
|
Linux C语言 SoC
Linux驱动的软件架构(二):设备驱动的分层思想
Linux驱动的软件架构(二):设备驱动的分层思想
627 0
|
数据采集 数据挖掘 Python
使用Python构建简单网页爬虫的技术指南
【5月更文挑战第17天】使用Python构建简单网页爬虫的教程,涉及`requests`和`BeautifulSoup4`库。首先安装所需库,然后发送HTTP GET请求获取HTML内容。利用`BeautifulSoup`解析HTML,找到目标元素,如`&lt;h2&gt;`标签内的新闻标题。处理相对链接,将它们转化为绝对URL。添加异常处理以应对网络问题,同时遵循网站的`robots.txt`规则。此爬虫适用于数据分析和市场研究等场景。
|
Linux 对象存储 数据安全/隐私保护
Docker部署MinIO对象存储服务器结合Cpolar实现远程访问
Docker部署MinIO对象存储服务器结合Cpolar实现远程访问
|
开发工具
Queen智能美化特效SDK需要高级美颜、常见美型、美体这样是属于按版本买,还是按客户端计费?
Queen智能美化特效SDK需要高级美颜、常见美型、美体这样是属于按版本买,还是按客户端计费?
125 1
|
Python
Python接口-2
Python接口-2
109 0
|
Java 应用服务中间件 网络安全
在手机上app中链接或者浏览器上访问电脑上Tomcat搭建的服务器以及其内容
在手机上app中链接或者浏览器上访问电脑上Tomcat搭建的服务器以及其内容
585 0
在手机上app中链接或者浏览器上访问电脑上Tomcat搭建的服务器以及其内容
|
前端开发
前端学习案例1-二叉搜索树删除两个节点的情况1
前端学习案例1-二叉搜索树删除两个节点的情况1
192 0
前端学习案例1-二叉搜索树删除两个节点的情况1
|
算法
聪明的KK【ACM】
聪明的KK【ACM】
158 0