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

相关推荐
rannn_1116 小时前
【力扣hot100】链表专题|160、206、234、141、142
java·算法·leetcode·链表·面试·开发
数模竞赛Paid answer6 小时前
2026年华东杯数学建模B题医药物流安排问题解题全过程文档及程序
算法·数学建模·数据分析·华东杯
不会代码的小猴6 小时前
21. 泛型编程上
开发语言·c++·笔记·算法
AI备案指南-满满7 小时前
大模型与算法备案全流程详解:从零到通过的完整指南
人工智能·算法·备案·大模型备案·算法备案
江畔柳前堤7 小时前
LLM 训练核心机制深度解析:Warmup、Cosine Decay 与 Perplexity 的完整知识体系
网络·人工智能·深度学习·算法·机器学习·语音识别
一只旭宝7 小时前
细讲C加加【9】C++ std::function与std::bind详解|仿函数、绑定器、类成员绑定、占位符、成员偏移指针
开发语言·c++·算法
良木林8 小时前
子串 - LeetCode hot 100
算法·leetcode·职场和发展
陌诺曦.8 小时前
Python扩展小练习
算法
coder!mq9 小时前
说几个常见的语法糖?
java·开发语言·算法