首页 > 系统相关 >浮点数在内存中的存储形式

浮点数在内存中的存储形式

时间:2023-08-26 19:00:38浏览次数:50  
标签:存储 符号 有效数字 浮点数 保存 内存 127

      大家都知道浮点数是什么,那他在内存中是怎么存储的呢?根据国际标准IEEE754规定中,任意一个二进制浮点数v可以表示成下面的形式:

  1. (-1)S*M*2E
  2. (-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。
  3. M表示有效数字,大于等于1,小于2.
  4. 2^E表示指数位。

      那怎么来理解这段话呢,我们举个例子来理解,101.1就是5.5的2进制浮点数,在二进制中小数点后面的1就表示0.5  换算成国际公式就是

    (-1)0*1.011*2^2

  •            S=0;//因为5.5是正数所以S为0
  •            M=1.011;
  •            E=2;//小数点向前移动两位所以指数是2

浮点数在内存中的存储形式_浮点数

     公式理解完了,那他到底是怎么存在内存里的呢?IEEE754规定在32位的浮点数,最高的1位是他的符号位S,接着的8位则是指数位E,剩下的23位是有效数字M的空间。也就是单精度的浮点数。

浮点数在内存中的存储形式_取值范围_02

      对于64位的浮点数,一样最高的一位为符号位S,接着11位为指数E,剩下的52位是有效数字M的空间也就是双精度浮点数。

浮点数在内存中的存储形式_浮点数_03

IEEE 754 对有效数字M和指数E,还有一些特别的规定。

     1<=M<2,也就是说,M可以写成1.xxxxxxx的形式,其中xxxxx表示小数部分。

     IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被省去,只保留后面的xxxx部分,比如在保存1.01时,只保存01,等到读取的时候再把第一位的1加上去,这用做的目的是可以节省1位有效数字,以32位浮点数为例,留给M的空间只有23位,现在将1省去,就可以保存24位有效数字了。

    至于指数E,情况就比较复杂。

    首先E是一个无符号的整数,这意味着如果E是8位,它的取值范围就是0255;如果E是11位,他的取值范围就是02047。但是,我们知道,科学计数法中E是可以出现负数的,所以IEEE 754规定,存入内存时E的真实值必须在加上一个中间数,对于8位的E,这个中间数就是127,对于11位的E,就是1023.比如2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001.

    E取出时还可以分为三种情况

  1. E不为全0也不为全1 这时只需要把中间值减去127或(1023)得到真实值,在小数点前加个1就行。
  2. E为全0 这时,浮点数的指数E等于1-127(或者1-1023)即为真实值。有效数字M不在加上第一位的1,而是还原成0.xxxxx的小数。这样做是为了表示无线接近于0的很小的数字。
  1. E为全1 这时,有效数字M全为0,表示±无穷大(正负取决于符号位S);




标签:存储,符号,有效数字,浮点数,保存,内存,127
From: https://blog.51cto.com/u_16103543/7245940

相关文章

  • Oracle 物理存储结构
    介绍RDBMS(关系型数据库)通常具有物理存储结构和逻辑存储结构。采用物理和逻辑结构分离的方式,可以做到管理物理结构而不影响逻辑结构的访问。Oracle将物理结构又分为数据库和实例。数据库是Oracle数据存储在磁盘存储中的一组文件。这些文件又根据不同的作用划分成了三类,分别是:数据......
  • MySQL 一行记录是怎么存储的?
    一、数据存在哪个文件可以看到,共有三个文件,这三个文件分别代表着:db.opt,用来存储当前数据库的默认字符集和字符校验规则。t_order.frm,t_order的表结构会保存在这个文件。在MySQL中建立一张表都会生成一个.frm文件,该文件是用来保存每个表的元数据信息的,主要包含表结构定义......
  • 一、MySQL体系结构和存储引擎
    一、MySQL体系结构和存储引擎1.1定义数据库和实例数据库:物理操作系统文件或其他形式文件类型的集合。在MySQL数据库中,数据库文件可以是frm、MYD、MYI、ibd结尾的文件。实例:MySQL数据库由后台线程以及一个共享内存区组成。共享内存可以被运行得后台线程所共享。需要牢记的是,......
  • 二、InnoDB存储引擎
    2.3InnoDB体系架构1)后台线程MasterThread:核心线程,主要负责将缓冲池的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新、合并插入缓冲、UNDO页的回收等。IOThread:处理IO请求PurgeThread:事务被提交后,其所使用的undolog可能不再需要,因此需要PurgeThread来回收已经使......
  • JVM对象创建与内存分配机制深度剖析
    对象的创建对象创建的主要流程: 1.类加载检查 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 new指令对应到语言层......
  • openGauss学习笔记-51 openGauss 高级特性-列存储
    openGauss学习笔记-51openGauss高级特性-列存储openGauss支持行列混合存储。行存储是指将表按行存储到硬盘分区上,列存储是指将表按列存储到硬盘分区上。行、列存储模型各有优劣,建议根据实际情况选择。通常openGauss用于OLTP(联机事务处理)场景的数据库,默认使用行存储,仅对执行复杂......
  • 通过Maven将文件上传到阿里云对象存储OSS
    首先在阿里云开通对象存储OSS功能(免费的),然后在Bucket列表中创建一个Bucket,地域建议选择华东1(杭州),因为这样后面就不用修改Endpoint,或者你直接记住Endpoint也行,读写仅限为公共读,其他的选项就默认的就行了。然后在右上角的头像初点击AccessKey管理,选择继续使用AccessKey,点击创建Ac......
  • 视频云存储/安防监控视频智能分析网关V3:占道经营功能详解
    违规占道经营者经常会在人流量大、车辆集中的道路两旁摆摊,导致公路交通堵塞,给居民出行的造成不便,而且违规占路密集的地方都是交通事故频频发生的区域。TSINGSEE青犀视频云存储/安防监控视频/AI智能分析网关V3运用视频+AI智能分析技术,实现对城市管理中违规、违法事件实时监控监管、......
  • 视频集中存储/云存储平台EasyCVR国标GB28181协议接入的报文交互数据包分析
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备传统安防视频监控的能力,......
  • 结构体内存对齐
    规则:1.第一个成员在与结构体变量偏移量为0的地址处。2.其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。对齐数=编译器默认的一个对齐数与该成员大小的较小值。vs中默认的值为8Linux中没有默认对齐数,对齐数就是成员自身的大小3.结构体总大小为最大对齐数(每个成员变量都有......