2.3.1_2 浮点数的表示 IEEE 754(例题训练)

引入几个重要的例题。

接下来把例题改成双精度浮点型,十进制真值不变。


对于这个题目来说,可能会被卡在这一步,就是0.4375,复杂的一个小数,怎么把这个数转换成的

二进制定点记法呢?可以这么去处理。

如果题目给了一个很复杂的小数,把它转换成二进制,可以这么做。第一种方法拼凑法。首先在草稿纸上写出小数点的前面比特,以及小数点的后面各个比特的权值等于多少,再尝试用各个比特的全值去拼凑出0.4375这样的值,刚好0.25+0.125,再加上0.0625,加和的值就是0.4375,所以这个值转换成二进制,就应该是0.0111。第一种方法对于一个比较长的小数,拼凑起来也没那么容易,所以下次遇到比较长的小数,可以尝试用第二种方法乘基取整法。

把题目给的十进制数的小数部分给抠出来,然后用乘基取整的方式,确定每一个比特应该是多少所谓的乘基,就是乘以基数。二进制的基数等于2,十进制的真值的符号位不考虑。对于比较复杂的小数来说,乘基取整法来转换二进制可能会更快一些。

这个题目同样是给了一个32比特的机器数,这个32比特的机器数有可能是一个带负号整数,带符号整数是用补码表示的,也有可能是一个float型的浮点数。

由于这一小节重点讨论的是浮点数,所以先尝试着把这个二进制串转换成浮点数,对应的浮点数真值应该是-2的17次方。

float型不行,就只能按照int型,也就是带符号的整数去解读。由于带符号整数都是用补码去保存的,首先观察最高位1,说明它是一个负数,要解读补码的真值,需要把补码先转换成原码,一个负数的补码转原码方法很简单:从右往左扫,扫到第一个比特1,在这个比特1的左边画一条线,这条线的再往左的部分除了符号位之外,0变1,1变0,符号位保持不变,以及刚才这条线右边的所有的比特都保持不变,这样就把补码转换成了原码。变成原码之后,再解读它的真值就变得很简单了。首先,它是一个负数,有三个1,三个1的权值分别是2的29、28和27次方,把这三个比特的权值分别加起来,再结合符号进行一些化简,就可以得到最终的正确答案,也就是A选项。

相关推荐
倒头就睡的小比特13 小时前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!13 小时前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼14 小时前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光15 小时前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark15 小时前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her115 小时前
并查集-听课笔记
笔记·算法·并查集
码流子16 小时前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven16 小时前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark16 小时前
从算法设计模式看编程思维的抽象能力4
算法
2601_9622186116 小时前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法