计算机系统基础实验——数据的机器级表示(计算浮点数 f 的绝对值[f])
创始人
2024-03-14 23:44:37
0

题目要求:

这个函数计算浮点数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类型输出。

最终位运算代码如下:

 运行结果:

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...