【算法和数据结构】_12_小算法_abs_fabsf_fabsd_大端小端判断
最近学习要用到求绝对值函数,看了一下有很多种的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_大端小端判断的更多相关文章
- python算法与数据结构-选择排序算法(33)
一.选择排序的介绍 选择排序(Selection sort)是一种简单直观的排序算法.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素, ...
- python算法与数据结构-希尔排序算法(35)
一.希尔排序的介绍 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. 希尔排序是把记录按下标的一定增量分组,对每 ...
- python算法与数据结构-算法介绍(31)
一.算法和数据结构 什么是算法和数据结构?如果将最终写好运行的程序比作战场,我们程序员便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰:兵法!故,数据结构和算法是一 ...
- 数据结构(DataStructure)与算法(Algorithm)、STL应用
catalogue . 引论 . 数据结构的概念 . 逻辑结构实例 2.1 堆栈 2.2 队列 2.3 树形结构 二叉树 . 物理结构实例 3.1 链表 单向线性链表 单向循环链表 双向线性链表 双向 ...
- 浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树
http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的 ...
- Python算法与数据结构--求所有子数组的和的最大值
Python算法与数据结构--求所有子数组的和的最大值 玄魂工作室-玄魂 玄魂工作室秘书 玄魂工作室 昨天 题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个 ...
- 【数据结构】KMP算法
我还是不太懂... 转2篇大神的解释 1>https://www.cnblogs.com/yjiyjige/p/3263858.html 2>https://blog.csd ...
- [Oracle] 关系型数据库排序算法和数据结构以及关联查询
关系型数据库排序算法和数据结构以及关联查询 1. Merge sort 理解merge sort算法将有助于更好地理解数据库join操作 - merge join 算法逻辑 将2个有序的大小为N/2的 ...
- 数据结构与算法系列----最小生成树(Prim算法&Kruskal算法)
一:Prim算法 1.概览 普里姆算法(Prim算法).图论中的一种算法.可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中.不但包含了连通图里的全部顶点(英语:Ve ...
随机推荐
- PHPer书单
想提升自己,还得多看书!多看书!多看书! 下面是我收集到的一些PHP程序员应该看得书单及在线教程,自己也没有全部看完.共勉吧! Github地址:https://github.com/52fhy/ph ...
- git查看日志
git查看日志 git log -n 显示前N条记录 git log -3 退出log命令 直接输入: q git log --stat -n 显示提交的文件的简要的修改统计 $ git log -- ...
- jqGrid实现当前页列合计与总计
当前页列合计 js代码如下: ... footerrow: true, gridComplete: function () { var rowNum = parseInt($(this).g ...
- Codeforces Round #380 (Div. 2) 总结分享
B. Spotlights 题意 有n×m个格子的矩形舞台,每个格子里面可以安排一个演员或聚光灯,聚光灯仅可照射一个方向(俯视,上下左右).若聚光灯能照到演员,则称为"good positi ...
- 对HTML5新增JS Api的思考
1.为什么javascript的变量名不使用css中的命名方法,而选择使用驼峰命名法 因为在javascript中“-”表示减法,所以如果使用“-”的话会出现不必要的问题. 2.在javascript ...
- 【WP开发】手电筒
或许很多人都想到,可以利用手机上摄像头的闪光灯做手电筒,当然,有利必有害,每次使用的时间不要过长,几分钟一般不会有什么问题,如果时间太长,难保会有损伤. 以往的方案是调用视频录制功能来开始录制视频,同 ...
- hdu Caocao's Bridges(无向图边双连通分量,找出权值最小的桥)
/* 题意:给出一个无向图,去掉一条权值最小边,使这个无向图不再连同! tm太坑了... 1,如果这个无向图开始就是一个非连通图,直接输出0 2,重边(两个节点存在多条边, 权值不一样) 3,如果找到 ...
- c#事件与委托
C#.net 目录(?)[-] 将方法作为方法的参数 将方法绑定到委托 事件的由来 事件和委托的编译代码 委托事件与Observer设计模式 范例说明 Observer设计模式简介 实现范例的Obse ...
- [git]撤销的相关命令:reset、revert、checkout
基本概念 工作区 暂存区 本地版本仓库 远程版本仓库 如果不清晰上面的四个概念,请查看廖老师的git教程 这里我多说几句:最开始我使用git的时候,我并不明白我为什么写完代码要用git的一些列指令把我 ...
- Android中include标签的使用
在Android的开发中,我们知道布局文件可以让我们很方便的对各个UI控件进行位置安排跟属性设置,而在程序中可以直接取得控件并赋予对应操作功能.但是,如果是一个复杂的界面设计,我们把所有布局都放在一个 ...