基础04:移码和浮点数的二进制表示

简介:

本文介绍移码以及浮点数的二进制表示。其中浮点数的二进制表示比较难理解,需要一点点数学知识。

标准移码

在一般情况下,移码就是将补码的符号位取反。
-118D = -1110110B (真值)
-118D表示-118的十进制;-1110110B表示二进制。
原码: 11110110
反码: 10001001
补码: 10001010
移码: 00001010

符号位取反的移码,可以等同于偏移值为128的移码,称为标准移码。
即-118D+128D = 10001010B + 10000000B = 00001010B。
移码,可以理解为补码加上偏移值,即将整个取值范围右移一段距离,从移码中可以直接看出真值的大小。
-128[移]: 00000000
-127[移]: 00000001
-126[移]: 00000010
……
+126[移]: 11111110
+127[移]: 11111111

移码的定义

X[移] = 2^(n-1) + X, -2^(n-1) <= X <= 2^(n-1) -1
X为真值,X[移]表示真值X的移码。
举个栗子:
一个字节,n=8。X[移] = 128 + X, -128 <= X <= 127

浮点数二进制表示

浮点数的二进制表示,分为三个部分。
sign,符号位。0表示正,1表示负。
exponent,指数位。采用2^(n-1) - 1的移码。n表示指数位位数。
fraction,小数位。

浮点数的位数如表所示。

—- sign exponent 移码 fraction
32位 1 8 2^(8 - 1) - 1 = 127 23
64位 1 11 2^(11 - 1) - 1 = 1023 52

在深入一点

浮点数的二进制表示用数学表示。
V= (−1)^S ×M × 2^E
(-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。
M表示有效数字,大于等于1,小于2。
E表示浮点数的指数。

对于M,1<=M<2,M可以写成1.xxxxxx的形式,其中xxxxxx就是小数部分,由0,1组成。IEEE754规定,第一位总是1,可以被舍去,只保存后面的xxxxxx部分。比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。

指数E的特殊情况(32位浮点数为例)

浮点数的指数E E的值 M的值 数值
-127 0 全0 ±0
-127 0 M小数点前不加1
0.xxxxxx的形式
128 255 全0 ±无穷
128 255 非0 NaN

  • 浮点数的指数E移码(偏移127)后得到E的值。
  • E全为0。浮点数的指数E等于-127,有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。目的是为例表示±0,以及接近于0的很小的数字。
  • E全为1。如果有效数字M全为0,表示±∞(正负取决于符号位s);如果有效数字M不全为0,表示这个数不是一个数(NaN)。

举个两个栗子

9.0的表示方法:
为正数,所以sign=0。
9.0D = 1001.0B = 1.001*2^3B。 注意:小数点不是十进制的小数点,是二进制的小数点。 1.001D ≠ 1.001B。
所以exponent的原值是3,移值是3+127=130D=10000010B。
分数部分,去掉第一位的1,剩余001 在后面补充0,保证23位,即00100000000000000000000。
合并起来,结果为0 10000010 00100000000000000000000。

0.625的表示方法:
为正数,sign=0。
0.625D = 0.101B。其中0.1B = 0.5D = (1/2)^1;0.01B = 0.25D = (1/2)^2;0.001B = 0.125D = (1/2)^3。
0.625D = 0.101B = 1.01 * 2^(-1)。
所以exponent的原值为-1,采用移植是-1+127=126D=01111110B
分数部分,去掉第一位的1,剩余01,在后面补充0,保证23位 01000000000000000000000
合并起来,结果为0 01111110 01000000000000000000000

总结

  1. 移码即补码右移一个偏移量。
  2. 浮点数的二进制表示,还是很头晕的。看不懂,多看几遍。如果还是看不懂,那就看不懂吧。

~~ EOF ~~

目录
相关文章
|
11月前
|
Web App开发 监控 JavaScript
监控和分析 JavaScript 内存使用情况
【10月更文挑战第30天】通过使用上述的浏览器开发者工具、性能分析工具和内存泄漏检测工具,可以有效地监控和分析JavaScript内存使用情况,及时发现和解决内存泄漏、过度内存消耗等问题,从而提高JavaScript应用程序的性能和稳定性。在实际开发中,可以根据具体的需求和场景选择合适的工具和方法来进行内存监控和分析。
|
机器学习/深度学习 数据采集 分布式计算
如何实现一个亿的股票模拟盘跟踪
如何实现一个亿的股票模拟盘跟踪
297 0
|
3月前
|
存储 人工智能 自然语言处理
AI代理内存消耗过大?9种优化策略对比分析
在AI代理系统中,多代理协作虽能提升整体准确性,但真正决定性能的关键因素之一是**内存管理**。随着对话深度和长度的增加,内存消耗呈指数级增长,主要源于历史上下文、工具调用记录、数据库查询结果等组件的持续积累。本文深入探讨了从基础到高级的九种内存优化技术,涵盖顺序存储、滑动窗口、摘要型内存、基于检索的系统、内存增强变换器、分层优化、图形化记忆网络、压缩整合策略以及类操作系统内存管理。通过统一框架下的代码实现与性能评估,分析了每种技术的适用场景与局限性,为构建高效、可扩展的AI代理系统提供了系统性的优化路径和技术参考。
167 4
AI代理内存消耗过大?9种优化策略对比分析
|
7月前
|
数据采集 前端开发 JavaScript
金融数据分析:解析JavaScript渲染的隐藏表格
本文详解了如何使用Python与Selenium结合代理IP技术,从金融网站(如东方财富网)抓取由JavaScript渲染的隐藏表格数据。内容涵盖环境搭建、代理配置、模拟用户行为、数据解析与分析等关键步骤。通过设置Cookie和User-Agent,突破反爬机制;借助Selenium等待页面渲染,精准定位动态数据。同时,提供了常见错误解决方案及延伸练习,帮助读者掌握金融数据采集的核心技能,为投资决策提供支持。注意规避动态加载、代理验证及元素定位等潜在陷阱,确保数据抓取高效稳定。
179 17
|
API 计算机视觉
【OpenCV】形态学滤波(2):开运算、形态学梯度、顶帽、黑帽
【OpenCV】形态学滤波(2):开运算、形态学梯度、顶帽、黑帽
260 1
|
存储 负载均衡 并行计算
Dask性能调优指南:从单机到多节点的最佳配置
【8月更文第29天】Dask 是一个灵活的并行计算库,适用于数组、数据帧和列表等数据结构,能够在单个机器上高效运行,也可以扩展到分布式集群。由于其灵活性和可扩展性,Dask 成为了数据科学家和工程师们处理大规模数据集的理想选择。本文将详细介绍如何针对不同的硬件环境优化 Dask 的性能,包括单机和多节点集群环境。
1288 8
|
存储 SQL 测试技术
图书馆管理系统系统分析与设计(下)
图书馆管理系统系统分析与设计(下)
428 1
|
编解码 测试技术 数据库
图书馆管理系统系统分析与设计(上)
图书馆管理系统系统分析与设计(上)
606 0
|
SpringCloudAlibaba Java 测试技术
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(六)Hystrix(豪猪哥)的使用
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(六)Hystrix(豪猪哥)的使用
311 1
|
数据可视化 数据挖掘 Python
绘制箱线图 与 异常值的输出 - 基于Python matplotlib库
绘制箱线图 与 异常值的输出 - 基于Python matplotlib库
1527 0
绘制箱线图 与 异常值的输出 - 基于Python matplotlib库