最近学习要用到求绝对值函数,看了一下有很多种的abs函数,因此想自己实现这些代码。

下面是我进行测试的代码:

#include <stdio.h>

typedef unsigned int U32,u32;
typedef enum {FALSE,TRUE} BOOL; //求绝对值函数
float fabsf(float x)
{
//这里可以看到浮点数和整数在计算机中的表达方式不一样
//下面的这种方法,不能用于整数
U32* p; p=(U32 *)&x;
*p=*p & 0x7FFFFFFF; return x;
} int abs(int x)
{
//负数的补码=反码+1=~源码+1 ;这个公式仅是对绝对值有效,
//而符号位无关
/*
if( x & 0x80000000 )
return ~(--x);
else
return x;
*/ //或者用下面的方法
return ( x & 0x80000000 ) ? ~(--x) : x ; /*
或者用下面的方法
return x>=0 ? x:(-1*x) ;
*/ } double fabsd(double x)
{
/*
*因为double的sizeof(double)=8,
*所以处理需要技巧
*这里我们可以利用char*指针进行处理
*/
/*
unsigned char* p; p = (unsigned char*)&x;
p=p+7;
*p=*p & 0x7F; return x;
*/ //也可以用下面的方法
if(x<)
return -*x; return x; } BOOL isLittleEndian()
{
/*可以用下面这种方法实现
U32 x=0x12345678;
unsigned char *p; p=(unsigned char*)&x;
if(!(*p ^ (unsigned char)0x78))
return TRUE;
else //这里的else分支,其实可以不用
return FALSE;
*/ //也可以利用下面的方式实现
union
{
unsigned char x;
unsigned int y;
}a; a.y=(unsigned int)0x78;
if(!(a.x^(0x78)))
return TRUE;
else //这里的else分支,其实可以不用
return FALSE;
} int main()
{
double x=fabsf(-123.0);
U32 y=0x12345678;
unsigned char *p; printf("fabsf(-123.0)=%f,sizeof(double)=%d",x,sizeof(double));
printf("\nabs(x)=%d",abs(-));
printf("\nfabsd(x)=%f",fabsd(-300.123)); p=(unsigned char*)&y;
printf("\n%x",*p);
if(isLittleEndian())
{
puts("\nYes");
} getchar();
return ;
}

测试结果如下图所示:

  

【算法和数据结构】_12_小算法_abs_fabsf_fabsd_大端小端判断的更多相关文章

  1. python算法与数据结构-选择排序算法(33)

    一.选择排序的介绍 选择排序(Selection sort)是一种简单直观的排序算法.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素, ...

  2. python算法与数据结构-希尔排序算法(35)

    一.希尔排序的介绍 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. 希尔排序是把记录按下标的一定增量分组,对每 ...

  3. python算法与数据结构-算法介绍(31)

    一.算法和数据结构 什么是算法和数据结构?如果将最终写好运行的程序比作战场,我们程序员便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰:兵法!故,数据结构和算法是一 ...

  4. 数据结构(DataStructure)与算法(Algorithm)、STL应用

    catalogue . 引论 . 数据结构的概念 . 逻辑结构实例 2.1 堆栈 2.2 队列 2.3 树形结构 二叉树 . 物理结构实例 3.1 链表 单向线性链表 单向循环链表 双向线性链表 双向 ...

  5. 浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树

    http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的 ...

  6. Python算法与数据结构--求所有子数组的和的最大值

    Python算法与数据结构--求所有子数组的和的最大值 玄魂工作室-玄魂 玄魂工作室秘书 玄魂工作室 昨天 题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个 ...

  7. 【数据结构】KMP算法

    我还是不太懂... 转2篇大神的解释    1>https://www.cnblogs.com/yjiyjige/p/3263858.html     2>https://blog.csd ...

  8. [Oracle] 关系型数据库排序算法和数据结构以及关联查询

    关系型数据库排序算法和数据结构以及关联查询 1. Merge sort 理解merge sort算法将有助于更好地理解数据库join操作 - merge join 算法逻辑 将2个有序的大小为N/2的 ...

  9. 数据结构与算法系列----最小生成树(Prim算法&amp;Kruskal算法)

     一:Prim算法       1.概览 普里姆算法(Prim算法).图论中的一种算法.可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中.不但包含了连通图里的全部顶点(英语:Ve ...

随机推荐

  1. 360路由器刷openwrt后设置wifi中继

    上一篇文章(360路由器刷openwrt.不死uboot.双系统 .wifi中继 - 飞鸿影~ - 博客园)讲了如何在360路由器C301上安装openwrt以及安装双系统.这篇文章讲如何设置无线中继 ...

  2. from表单iframe原网页嵌入

    今天是巩固的from表单跟嵌入其他页面,同样的,学习到了新的知识. 温故而知新: iframe--在原页面嵌入其他页面,以窗口的样式 其中scrolling--滚动条 noresize--可调整大小 ...

  3. fir.im Weekly - iOS开发中的Git流程

    本期 fir.im Weekly 收集了微博上的热转资源,包含 Android.iOS 开发工具.源码等好用的轮子,还有一些 APP 设计的 Tips,希望对你有用. 精仿知乎日报 iOS 端 @我偏 ...

  4. iOS----关于第三方的运用(有待补充)

    第三方东西涵盖哪些内容? 1)第三方SDK 2)第三方框架 3)第三方功能代码的封装开源分享 4)第三方工具类等等 PS:1. 对于一个在正在深入学习的程序员而言,有时候参考学习或者使用一下第三方的东 ...

  5. 18.实现如下类之间的继承关系,并编写Music类来测试这些类。

    package zhongqiuzuoye; public class Instrument { public void play() { System.out.println("弹奏乐器& ...

  6. run命令

    1.打开IIS %SystemRoot%\system32\inetsrv\iis.msc 2.打开EventView eventvwr 3.打开程序和功能 appwiz.cpl 4.打开intern ...

  7. bootstrap插件思路整理

    知识有时也需温故知新嘛,本次做一次bs插件梳理. $.support.transition 通过判断自定义元素是否支持WebkitTransition.MozTransition.OTransitio ...

  8. 新人学习Android开发遇到的小问题总结

    1. IDE搭建: 搭建android的IDE时,先注意是什么版本的系统,64/32位系统. 通常使用的是Eclipse for android,Android Studio由于还需要FQ,网速慢,所 ...

  9. Azure Automation (3) 定期将某个Azure订阅下的所有虚拟机开关机

    <Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China. 在笔者之前的文章中,我们介绍了使用Azure Automation ...

  10. $("#id").val()取值textarea是""

    今天取值的时候,判断是null可以通过,证明不是null,明明是空的. 判断是''通过,证明取出来的是''空字符串.