【漫步刷题路】- 模拟实现abs()

简介: 若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

abs()库函数原型

96b7acf01445468b9c55bca087f59b41.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;
}

23cf6bc75a5843dcaf8be18db4b7e318.png

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

06ec72b20b5e4263a3d282e666d58843.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
相关文章
|
10月前
【每日一题Day332】LCP 06. 拿硬币 | 模拟
【每日一题Day332】LCP 06. 拿硬币 | 模拟
46 0
|
10月前
【每日一题Day114】LC1223 掷骰子模拟 | 记忆化搜索+dp
【每日一题Day114】LC1223 掷骰子模拟 | 记忆化搜索+dp
69 0
|
8月前
递推7-2 sdut-C语言实验-养兔子分数
递推7-2 sdut-C语言实验-养兔子分数
33 0
|
5月前
|
算法
Leecode第十六题(最接近的三数之和)
这篇文章介绍了LeetCode第16题“最接近的三数之和”的题目要求、解题思路和代码实现,该算法题目要求从给定的整数数组中找出三个数,使它们的和最接近给定的目标值。
86 0
|
9月前
|
存储 索引
每日刷题——相遇、宝石(模拟+数学)、相助(模拟+数组)、相依(dp的优化)
每日刷题——相遇、宝石(模拟+数学)、相助(模拟+数组)、相依(dp的优化)
53 1
|
存储 机器人 C++
leetcode 每日一题 874. 模拟行走机器人 c++模拟解法
简单来说就是机器人在一个矩阵上移动 我们要找到一个离原点的一个最大欧式距离的平方
155 0
|
10月前
代码随想录Day36 动态规划05 LeetCode T1049最后一块石头的重量II T494 目标和 T474 一和零
代码随想录Day36 动态规划05 LeetCode T1049最后一块石头的重量II T494 目标和 T474 一和零
66 0
|
算法 C++
【每日算法Day 98】慈善赌神godweiyang教你算骰子点数概率!
【每日算法Day 98】慈善赌神godweiyang教你算骰子点数概率!
184 0
|
机器学习/深度学习 传感器 算法
2023美赛C题-Wordle预测思路及matlab代码
2023美赛C题-Wordle预测思路及matlab代码
2021年暑假康复性训练(Codeforces Round #731 (Div. 3))全题解(上)
2021暑假康复性训练 Codeforces Round #731 (Div. 3) A Shortest Path with Obstacle B. Alphabetical Strings C. Pair Programming D. Co-growing Sequence E. Air Conditioners F. Array Stabilization (GCD version) G. How Many Paths?
133 0
2021年暑假康复性训练(Codeforces Round #731 (Div. 3))全题解(上)

热门文章

最新文章