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选项。

相关推荐
Navigator_Z12 分钟前
LeetCode //C - 1223. Dice Roll Simulation
c语言·算法·leetcode
171320330计算机毕设编程14 分钟前
2027计算机毕设五大方向对比&选题推荐
java·ide·python·算法·django·php·推荐算法
万物智能27 分钟前
设备树DTS-【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
后端·算法
代码不停34 分钟前
子数组问题
java·算法
小欣加油43 分钟前
Leetcode2058 找出临界点之间的最小和最大距离
数据结构·c++·算法·leetcode·职场和发展
华华哥20221 小时前
《模型不玄学》第25章 双头模型:共享底座 + 两个分支
算法
Yfhonier1 小时前
6441. 特别的除法
c++·算法
华华哥20221 小时前
《模型不玄学》第5章 看懂你的数据:先认字段,再过门禁
算法
国科安芯1 小时前
低轨卫星姿轨控系统中抗辐射MCU的选型依据与工程实践
单片机·嵌入式硬件·算法·架构·系统安全·低轨卫星·抗辐射
高亦真1 小时前
今天是学习嵌入式的第33天
linux·学习·算法