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



相关文章
|
5月前
|
弹性计算 运维 安全
阿里云轻量应用服务器38元1年和云服务器99元1年怎么选?二者性能区别及选择参考
在阿里云当下的活动中,38元/年的轻量应用服务器与99元/年的云服务器ECS成为众多新用户的关注焦点。但是有部分用户并不是很清楚二者之间的区别,因此就不知道应该如何选择。接下来,笔者将为您详细剖析ECS云服务器与轻量应用服务器的差异,以供您参考和选择。
549 4
阿里云轻量应用服务器38元1年和云服务器99元1年怎么选?二者性能区别及选择参考
|
安全 Linux Go
Linux数据备份与恢复
Linux数据备份与恢复
418 5
|
10月前
|
域名解析 存储 安全
家庭宽带IP与IDC机房IP
本文对比了家庭宽带IP与IDC机房IP在定义、用途、稳定性、带宽、安全性及IP地址分配方式上的差异。家庭宽带IP主要用于个人上网,动态分配,带宽和安全性较低,稳定性受多种因素影响;而IDC机房IP专为服务器设计,静态分配,带宽资源丰富,具备高稳定性和专业安全防护措施,适合企业级应用需求。
1340 2
|
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开发实战:从零基础到短视频上线》。
627 1
FFmpeg开发笔记(七)欧拉系统编译安装FFmpeg
|
监控 Java 数据库连接
Java线程管理:守护线程与用户线程的区分与应用
在Java多线程编程中,线程可以分为守护线程(Daemon Thread)和用户线程(User Thread)。这两种线程在行为和用途上有着明显的区别,了解它们的差异对于编写高效、稳定的并发程序至关重要。
369 2
|
Web App开发 编解码 监控
直播协议
【10月更文挑战第26天】不同的直播协议具有不同的特点和应用场景。在选择直播协议时,需要根据直播的需求、目标受众、网络环境等因素进行综合考虑,以选择最适合的直播协议,确保直播的流畅性、稳定性和高质量。
|
监控 安全 C#
使用C#如何监控选定文件夹中文件的变动情况?
使用C#如何监控选定文件夹中文件的变动情况?
400 19
|
前端开发 CDN
React 在 html 中 CDN 引入(包含useState、antd、axios ....)
React 在 html 中 CDN 引入(包含useState、antd、axios ....)
1811 0
|
人工智能 自动驾驶 算法
AIoT(人工智能物联网)技术的发展前景
【8月更文挑战第1天】AIoT技术作为人工智能与物联网的深度融合产物,正展现出广阔的发展前景。随着技术的不断进步和市场需求的持续增长,AIoT技术将在更多领域和场景发挥重要作用,推动社会向更加智能化、高效化的方向发展。
1253 6
|
存储 数据采集 分布式计算
Java中的大数据处理与分析架构
Java中的大数据处理与分析架构