c语言-浮点型数据在内存中的存储

目录

  • 前言
  • 一、浮点数存储例子
  • 二、浮点数在内存的存储格式
    • 2.1 32位浮点数存储格式
    • 2.2 64位浮点数存储格式
  • 三、IEEE 754对有效数字M和指数E的规定
    • 3.1 对存储有效数字M的规定
    • 3.2 对存储指数E的规定
      • 3.2.1 E在32位浮点数的存储格式
      • 3.2.2 E在64位浮点数的存储格式
    • 3.3 对读取有效数M和指数E的规定
      • 3.3.1 当E在内存存储的值不全为0或不全为1
      • 3.3.2 当E在内存存储的值为全0时
      • 3.3.3 当E在内存存储的值为全1时
  • 总结


前言

本篇文章介绍浮点型数据在内存中的存储。


一、浮点数存储例子

浮点型家族

  1. float
  2. double
  3. long double(c99)

浮点数表示的范围在<float.h>头文件中定义
整型家族表示范围在<limits.h>头文件中定义

例子演示:
在这里插入图片描述
结果分析:
使用一个float指针指向整型变量n,按浮点型输出时,输出了0;
通过float
指针改变指针指向的内容,按整型输出时,输出了一个非常大的正整数。
说明整型数据和浮点型数据的存储和对数据的访问方式不相同。
下面对浮点型数据的存储展开叙述。

二、浮点数在内存的存储格式

根据国际标准IEEE754,任意一个二进制浮点数V可以写成:

浮点数公式:(-1)^S * M * 2^E
S表示符号位,0表示正数,1表示负数;
M表示有效数字, 1 <= M < 2;
E表示指数位

例子1:
假设一个十进制浮点数V = 5.0f,化成二进制为101.0
根据二进制科学计数法,101.0 -> 1.01 * (2 ^ 2)-> (-1)^0 * 1.01 * (2^2)
则此时S = 0、M = 1.01、E = 2

例子2:
假设一个十进制浮点数V = 9.5f,化成二进制为1001.1
根据二进制科学计数法,1001.1->1.0011 * (2 ^ 3) -> (-1)^0 * 1.0011 * (2^3)
则此时S = 0、M = 1.0011、E = 3

2.1 32位浮点数存储格式

S占1bit、E占8bit、M占23bit
在这里插入图片描述

图2.1 32位浮点数存储格式

2.2 64位浮点数存储格式

S占1bit、E占11bit、M占52bit
在这里插入图片描述

图2.2 64位浮点数存储格式

三、IEEE 754对有效数字M和指数E的规定

3.1 对存储有效数字M的规定

1 <= M < 2,则M可以写成1.xxx的形式,其中xxx表示小数部分。
IEEE 754规定,在计算机内部存储M时,默认M的第一个位总是1,因此在存储M时,不会将这个1存储,只存储小数部分。比如M = 1.01时,只存储01,当读取时,再自动加上1。
好处:可以节省一个有效位,即23位都存储小数部分。

3.2 对存储指数E的规定

科学计数法中的E会出现负数,可以IEEE754规定,存入内存的值为E的真实值再加上一个中间值
下面根据不同位数进行叙述:

3.2.1 E在32位浮点数的存储格式

E的取值范围:0~255
E的中间值:127
存储值 = 真实值+中间值
例如:
当一个浮点数的指数为2^10时,E的真实值为10,则存储值 = 10 + 127 = 137,即10001001,不够23位,用0补齐
则M在内存的表示为 1000 1001 0000 0000 0000 000

3.2.2 E在64位浮点数的存储格式

E的取值范围:0~2047
E的中间值:1023
存储值 = 真实值+中间值

3.3 对读取有效数M和指数E的规定

3.3.1 当E在内存存储的值不全为0或不全为1

指数E的存储值-中间值(127或1023),得到真实值,然后在有效位M前加上第一位。

3.3.2 当E在内存存储的值为全0时

浮点数的指数E的真实值 = (1 - 127) 或 (1-1023)
有效数字M不再加上第一位1,而是还原为0.xxx的小数。
这样做是为了表示正负0,以及接近于0的很小的数。

3.3.3 当E在内存存储的值为全1时

这时,如果有效数字M全为1,表示正负无穷大(正负取决于符号位S)


总结

本篇文章叙述了浮点型数据在内存中的存储格式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/317932.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阶段十-分布式-Redis02

第一章 Redis 事务 1.1 节 数据库事务复习 数据库事务的四大特性 A&#xff1a;Atomic &#xff0c;原子性&#xff0c;将所以SQL作为原子工作单元执行&#xff0c;要么全部执行&#xff0c;要么全部不执行&#xff1b;C&#xff1a;Consistent&#xff0c;一致性&#xff0…

栈实现前缀表达式的计算

前缀表达式计算 过程分析 中缀表达式&#xff1a;&#xff08;1 5&#xff09;*3 > 前缀表达式&#xff1a;*153 &#xff08;可参考这篇文章&#xff1a;中缀转前缀&#xff09; 第一步&#xff1a;从右至左扫描前缀表达式&#xff08;已存放在字符数组中&#xff09;&a…

3D视觉-相机选用的原则

鉴于不同技术方案都有其适用的场景&#xff0c;立体相机的选型讲究的原则为“先看用途&#xff0c;再看场景&#xff0c;终评精度”&#xff0c;合适的立体相机在方案中可以起到事半功倍的效果。从用途上来进行划分&#xff0c;三维视觉方案主要应用在两个方向&#xff1a;测量…

Ubuntu安装CUDA出在三个cuda相关文件夹?

按照网上的教程&#xff0c;在/usr/local中操作cuda文件夹&#xff0c;但是发现这里会出现不止一个cuda文件夹&#xff1a; 可以看大这里有cuda、cuda-11、cuda-11.8三个文件夹&#xff0c;实际上我安装的是11.8的cuda&#xff0c;那么第三个文件是好理解的&#xff0c;就是我…

ASP.NET Core AOT

Native AOT 最初在 .NET 7 中引入&#xff0c;在即将发布的 .NET 8 版本中可以与 ASP.NET Core 一起使用。在这篇文章中&#xff0c;我们从总体角度审视其优点和缺点&#xff0c;并进行测量以量化不同平台上的改进。 源代码&#xff1a;https://download.csdn.net/download/he…

全国计算机等级考试| 二级Python | 真题及解析(7)

一、选择题 1.python中,表达式5%2 = ( )。 A.2.5 B.2 C.1 D.0 2.已知字符串a="python",则a[ 1 : 3 ]的值为( ) A."pyth" B."pyt" C."py" D…

借助libcurl实现ftp文件上传,断点续传demo梳理。

公司业务&#xff0c;需要实现一个ftp大文件上传的功能&#xff0c;简单搭建一个ftp服务器&#xff0c;首先研究demo&#xff0c;以及断点上传的功能。 1&#xff1a;首先了解文件上传相关协议&#xff0c;ftp&#xff0c;sftp或者基于http&#xff0c;其他自己实现等。 2&am…

springCloud之Stream

1、简介 Spring Cloud Stream是一个用来为微服务应用构建 消息驱动 能力的框架。通过使用 Spring Cloud Strea m &#xff0c;可以有效简化开发人员对消息中间件的使用复杂度&#xff0c;降低代码与消息中间件间的耦合度&#xff0c;屏蔽消息中间件 之 间的差异性&#xff0c;…

Paddle3D 2 雷达点云CenterPoint模型训练

2 Paddle3D 雷达点云CenterPoint模型训练–包含KITTI格式数据地址 2.0 数据集 百度DAIR-V2X开源路侧数据转kitti格式。 2.0.1 DAIR-V2X-I\velodyne中pcd格式的数据转为bin格式 参考源码&#xff1a;雷达点云数据.pcd格式转.bin格式 def pcd2bin():import numpy as npimport…

基于头脑风暴算法优化的Elman神经网络数据预测 - 附代码

基于头脑风暴算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于头脑风暴算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于头脑风暴优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&…

EDI 项目推进流程

EDI 需求确认 交易伙伴发来EDI对接邀请&#xff0c;企业应该如何应对&#xff1f; 首先需要确认EDI需求&#xff0c;通常包括传输协议和报文标准以及传输的业务单据类型。可以向交易伙伴发送以下内容&#xff1a; &#xff08;中文版&#xff09; 与贵司建立EDI连接需要使用…

中国计算机学会推荐国际学术会议及时间(计算机体系结构/高性能计算/存储系统)

中国计算机学会推荐国际学术会议及时间 (计算机体系结构/高性能计算/存储系统) 参考资料 参考链接: call4papers