计算机组成原理-定点/浮点表示
前言:定点/浮点表示的学习笔记
什么是定点表示
这里有个问题,为什么小数定点机中补码能表示最小的范围是-1?因为在补码+-0都是用00000000来进行表示了,所以在补码范围内中多出来了一个数的表示,也就是10000000
这里的话在小数里面也相同,那么也就是最小的数就是符号位为1,其他的数为0,也就是1.000...0,那么这个值就是-1
其实这里的话准确的来说应该是1.0,我们这里可以通过定义来进行求出,小数补码的负数的计算公式为 [x]补 = 2+x,也就是2-1,也同样可以得出-1的补码就是1.000..0
知识点:小数-1,既没有原码,也没有反码,原因也很好理解,原码和反码的+-0都需要两个数来进行表示
为什么要引入浮点表示
-
编程困难,程序员要自己手动调节小数点的位置
-
如果要比较两个数,一个数十分的小只占1个字节,但是一个数很大可能有十几个字节,但是这两数要进行比较,那么就需要有一个内存位置来存储它们两个,但是问题来了,为了比较一次一个这么大的数,这样子就会十分的浪费内存的资源,所以这里就引入了浮点表示的方法,通过浮点表示的方法进而解决了这种问题
浮点表示
个人理解,其实跟科学计数法十分的相像,可以通过类比科学计数法来进行学习
浮点表示的形式:N=S*r^j
S是尾数(绝对值小于等于1),j是阶码(整数),r是尾数的基值(可以是2 4 8 16)
比如一个数N,N=11.0101
我们这里可以通过浮点表示法来进行表示
-
首先需要注意的是尾数的绝对值需要的是小于等于1,那么这图中只有其中的两个是符合的
-
还需要注意的一点是尾数的表示,这里的话表示的是通过二进制来进行表示的,除了二进制,四进制,八进制都可以
-
还需要注意的一点就是什么叫做"规格化",其实就是小数部分的最高位为1,那么该数的浮点表示就称作为是规格化
浮点在机器中的表示形式
上面描述了正常的浮点是如何表示的,其实就想是科学计数法一样,这里的话继续来讲浮点在机器中是如何进行表示的
-
首先需要知道的是 阶码 和 尾数都是有符号位的,所以这里个符号位就有两个,一个是描述的阶码的符号位,一个是描述尾数的符号位
-
Jf和m共同表示小数点的实际位置是怎么理解的,可以看到如果Jf和m越大的话,那么小数点的位置就会越靠后
-
n表示精度,其实就是n的位数越大的话,那么这个数的精度越高
浮点数的表示范围
上面学习了浮点数的表示形式,这里继续来通过浮点数的表示形式来学习浮点数能够表示的范围
我们这里浮点数通过原码的形式来进行学习
这里给了前提条件为浮点数阶码的数值位取m位,尾数的数值位取n位,这里的话不考虑规格化形式
- 最大的负数
那么分成两部分表示,分别是阶码和尾数这两个部分,阶码最大,尾数最小
- 最小的负数
那么分成两部分表示,分别是阶码和尾数这两个部分,阶码最小,尾数最大
-
最大的正数,跟最小负数一样,符号位不一样
-
最小的正数,跟最大负数一样,符号位不一样
这里还有个溢出的知识点:
-
上溢,指的就是阶码 > 最大阶码
-
下溢,指的就是阶码 < 最小阶码,这种情况机器就会作为0值处理
相关的练习,如下图所示
-
如果想表示正负3万的十进制数,也就是4位能够表示0~15,就是215次,215=34768,而阶码的符号位也需要占到一位,所以阶码的话总共用到了5位
-
这里的话又要求最大精度的前提下,所以尽可能的需要让n的位数多,尾数的位的长度尽量大,而这里的话数符占了一位,所以尾数的长度就是24-5-1=18位
浮点数的规格化表示
这个在上面简单学习浮点数的时候有提到过,那时候说的就是在浮点数中,小数部分的最高位为1,那么该数的浮点表示就称作为是规格化,这里继续来学习下说
浮点数和定点数的区别
定点数:小数点在数中的位置是固定不变的,通常有定点整数和定点小数。在对小数点位置作出选择之后,运算中的所有数均应统一为定点整数或定点小数,在运算中不再考虑小数问题。
浮点数:小数点的位置是不固定的,用阶码和尾数来表示。通常尾数为纯小数,阶码为整数,尾数和阶码均为带符号数。尾数的符号表示数的正负;阶码的符号则表明小数点的实际位置。
我这里举个对应的例子来查看,我想说的就是对于定点数和浮点数的表示问题,就比如这道题,最后是通过定点数和浮点数来表示
可以看到定点数的小数点是不变的,是死的,那么就会有一个问题,如果位数大的话,表示的话只能写成0.1111111xxxxxxxxxxxxxxxxxx1,甚至更多,这就导致了空间的浪费
而图中可以看到浮点数的表示,浮点数通过阶码和尾数来进行表示,这样的话虽然小数点会变动位置,但是会节省在内存空间中的资源
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2020-04-17 浏览器的解码与编码
2020-04-17 PHP 反序列化中的session考点