计算机系统基础实验——数据的机器级表示(计算浮点数 f 的绝对值[f])

题目要求:

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

最终位运算代码如下:

 运行结果:

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值