题目要求:
这个函数计算浮点数f的绝对值[f]。如果f是NaN,函数应该简单的返回f。
Unsigned float_abs (unsiged f)
{
/**************/
return/*******/;
}
先分析题目,题目有两个要求:
1.判断f是否是NAN类型,如果是返回f。
2.如果不是NAN类型,返回f的绝对值。
首先来了解一下浮点数在内存中的储存方式:

什么是NAN类型?
NaN(NotaNumber,非数)是计算机科学中数值数据类型的一类值,表示未定义或不可表示的值。
知道了什么是NAN,那该如何判断一个浮点数是NAN类型?
对于浮点数来说,阶码的每个二进制位全为1并且尾数不全为0即为NAN类型。
顺便提一下,阶码的每个二进制位全为1并且尾数全为0为INF类型。
对于float类型来说,我们只用把他左移1位然后右移24位就能得到他的阶码,用代码表示即为(f<<1)>>24
NAN类型的阶码全为1,0xFF(或0x7fffffff)也全为1,所以我们将NAN的阶码与0xFF进行与(&)运算得到的结果也全为1,即NAN类型与0xFF与运算后结果仍然为0xFF,所以我们可以通过((f<<1)>>24)&0xFF结果是否为0xFF来判断他是否为NAN类型。
ps:与运算(&): x&1=x x&0=0 与1&结果为原来的数,与0&结果为0。
如果不是NAN类型那如何返回f的绝对值呢?
float的符号位在最左边 所以我们只需要将f左移一位然后右移一位就可以将符号位变为0代码表示即为(f<<1)>>1。
最后float类型不能进行位运算,所以我们要将float进行强制类型转化为unsigned类型位运算后再强制类型转换为float类型输出。
最终位运算代码如下:

运行结果:












![计算机毕业论文Java项目源码下载S2SH智慧社区管理系统[包运行成功]](https://img-blog.csdnimg.cn/e7acd83e159b4a80b23ffee0102f71fb.png)



![[附源码]计算机毕业设计springboot右脑开发教育课程管理系统](https://img-blog.csdnimg.cn/79802d599433464ab401b0b8a5588e8a.png)


![[附源码]计算机毕业设计springboot在线票务系统](https://img-blog.csdnimg.cn/d905ffb4767b489ca59d362c405d196a.png)
