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

相关推荐
Ulyanov12 分钟前
像素迷宫:路径规划算法的可视化与实战
大数据·开发语言·python·算法
Mr_pyx20 分钟前
【LeetCode Hot 100】 除自身以外数组的乘积(238题)多解法详解
算法·leetcode·职场和发展
Trouvaille ~40 分钟前
零基础入门 LangChain 与 LangGraph(五):核心组件上篇——消息、提示词模板、少样本与输出解析
人工智能·算法·langchain·prompt·输入输出·ai应用·langgraph
MOON404☾1 小时前
Chapter 002. 线性回归
算法·回归·线性回归
故事和你911 小时前
洛谷-数据结构-1-3-集合3
数据结构·c++·算法·leetcode·贪心算法·动态规划·图论
春栀怡铃声1 小时前
【C++修仙录02】筑基篇:类和对象(上)
开发语言·c++·算法
ulias2122 小时前
leetcode热题 - 3
c++·算法·leetcode·职场和发展
实心儿儿2 小时前
Linux —— 进程概念 - 程序地址空间
linux·运维·算法
菜鸟丁小真2 小时前
LeetCode hot100-287.寻找重复数和994.腐烂的橘子
数据结构·算法·leetcode·知识点总结
发发就是发2 小时前
USB系统架构概述:从一次诡异的枚举失败说起
驱动开发·单片机·嵌入式硬件·算法·fpga开发