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.mzph.cn/news/594191.shtml

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

相关文章

pythonnumpy六:高级功能:数组排序、数组连接、数组拆分等。

numpy是一个强大的Python库&#xff0c;提供了丰富的数组操作功能。下面我会详细介绍numpy中的数组排序、数组连接和数组拆分等功能。 1.数组排序&#xff1a; 使用np.sort()函数可以对数组进行升序排序。它返回一个新的已排序的数组。若要在原始数组上进行排序&#xff0c;可…

谷歌Gemini模型,碾压GPT-4!

谷歌Gemini 1.0革新&#xff0c;推出Gemini Ultra、Gemini Pro和Gemini Nano模型。Gemini Ultra强大但慢&#xff0c;Gemini Pro通用&#xff0c;Gemini Nano高效。Gemini模型在多领域与ChatGPT竞争&#xff0c;尤其Gemini Pro已应用于Bard。Gemini模型预计将在2024年通过Bard …

NLP论文阅读记录 - 2021 | SimCLS:抽象概括对比学习的简单框架

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作2.1优势 三.本文方法——抽象概括的对比学习框架3.1 第一阶段&#xff1a;候选生成3.2 第二阶段&#xff1a;无参考评估3.3对比训练 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4…

【论文阅读】AADiff: Audio-Aligned Video Synthesis with Text-to-Image Diffusion

AADiff:基于文本到图像扩散的音频对齐视频合成。 code&#xff1a;没开源 paper&#xff1a;[2305.04001] AADiff: Audio-Aligned Video Synthesis with Text-to-Image Diffusion (arxiv.org) 一种新的T2V框架&#xff0c;额外使用音频信号来控制时间动态&#xff0c;使现成的…

MySQL中的六种日志你都懂么?不懂!那就必须看看

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

docker 安装可视化工具 Portainer 以及 汉化

安装portainer是最新版本&#xff0c;汉化指定版本2.9.1 。如果要安装汉化版&#xff0c;可直接跳转步骤四 一、拉去镜像 安装网址&#xff1a;Install Portainer BE with Docker on Linux - Portainer Documentation docker pull portainer/portainer二、根据portainer镜像创建…

常用rtmp、m3u8、flv、mp4直播流在线测试地址

✍️作者简介&#xff1a;小北编程&#xff08;专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a; 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助请&#x1f…

CMake入门教程【基础篇】CMake+Linux gcc构建C++项目

文章目录 1.概述2.GCC与CMake介绍3.安装CMake和GCC4.代码示例 1.概述 在Linux环境下&#xff0c;使用CMake结合GCC&#xff08;GNU Compiler Collection&#xff09;进行项目构建是一种常见且高效的方法。CMake作为一个跨平台的构建系统&#xff0c;可以生成适用于不同编译器的…

面试经典150题(55-58)

leetcode 150道题 计划花两个月时候刷完&#xff0c;今天&#xff08;第二十四天&#xff09;完成了4道(55-58)150&#xff1a; 55.&#xff08;19. 删除链表的倒数第 N 个结点&#xff09;题目描述&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff…

渗透第四天

常用的对称加密算法有&#xff1a;DES、3DES、RC2、RC4、AES 常用的非对称加密算法有&#xff1a;RSA、DSA、ECC 使用单向散列函数的加密算法&#xff08;摘要算法&#xff09;&#xff1a;MD5、SHA 密码存储加密 md5 32位或者16位 0-9 a-f 所组成的字符串 不可…

JWT+Redis 实现接口 Token 校验

1、业务逻辑 有一些接口&#xff0c;需要用户登录以后才能访问&#xff0c;用户没有登录则无法访问。 因此&#xff0c;对于一些限制用户访问的接口&#xff0c;可以在请求头中增加一个校验参数&#xff0c;用于判断接口对应的用户是否登录。 而对于一些不需要登录即可访问的接…

基于SSM的网络游戏交易平台设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

java常见面试题:什么是异常?Java中的异常有哪些分类?

异常是一个汉语词语&#xff0c;读音为y chng&#xff0c;指非正常的&#xff1b;不同于平常的&#xff1b;非常。在Java中&#xff0c;异常&#xff08;Exception&#xff09;是程序在运行过程中出现的不正常情况&#xff0c;例如除以零、数组越界等。异常分为两大类&#xff…

湖南大学-算法设计与分析-2023期末考试【原题】

前言 21&#xff1a;00刚刚结束的考试&#xff0c;凭着回忆把题目重现出来了&#xff0c;在复习的时候根本找不到往年的试卷&#xff0c;希望这张回忆的试卷能帮助到下一届的同学。知道题目基本上就能做出来了&#xff0c;但是不知道是真的做不出来&#xff0c;我就不给答案了…

【软件工程】走进敏捷开发:灵活、协作、迭代的软件工艺之旅

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 软件工程 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言&#xff1a; 正文 敏捷开发&#xff08;Agile Development&#xff09; 详细介绍&#xff1a; 优缺点&#xff1a; 优点&#xf…

新概念英语第二册(17)

【New words and expressions】生词和短语&#xff08;5&#xff09; appear v. 登场&#xff0c;扮演 stage n. 舞台 bright adj. 鲜艳的 stocking n. &#xff08;女用…

【Mybatis】深入学习MyBatis:高级特性与Spring整合

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; Mybatis ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 高级特性 1 一级缓存和二级缓存 一级缓存 二级缓存 2 延迟加载 5 整合Spring 1 MyBatis-Spring模块 2 事务管理 结…

【Spark精讲】RDD缓存源码分析

面试题&#xff1a;cache后面能不能接其他算子&#xff0c;它是不是action操作&#xff1f; 能&#xff0c;不是action算子。 源码解析 RDD调用cache或persist之后&#xff0c;会指定RDD的缓存级别&#xff0c;但只是在成员变量中记录了RDD的存储级别&#xff0c;并未真正地…

SQL优化:物化视图

在前面一篇内容中&#xff0c;我们讲解了索引的创建。索引作为数据的目录&#xff0c;占用独立的存储空间&#xff0c;可以帮助我们提高查询的速度。 除了使用索引&#xff0c;还有一种方法可以加速查询&#xff0c;尤其是当我们的查询中使用了各种聚合函数&#xff0c;或者进…

[情商-6]:识别职场中、情侣之间的暗捧、暗拍、暗赞、暗赏,保持良好的关系

目录 1. 发现他们的优点和长处 2. 保持积极的态度 3. 赠送小礼物 4. 提供有用的建议 5. 维护他们的荣誉 6. 询问他们的意见&#xff01;&#xff01;&#xff01; 7. 注意细节 8. 不要过度夸张 9. 尊重上司的权威 10. 保持适当的距离 前言&#xff1a; 技术人员常把…