在引入知识之前,先来看一个案例,就知道了解浮点型数据存储的重要性与必要性。

举个例子:

​
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main()
{int num = 9;float *pnum = (float *)&num;//强制转换类型printf("n的值为:%d\n",n);printf("*pFloat的值为:%f\n",*pnum);*pnum = 9.0;printf("num的值为:%d\n",n);printf("*pFloat的值为:%f\n",*pnum);return 0;
}​

一般情况下我们都会认为*pnum打印的就是n的值,只不过是以浮点型打印出来,所以是9.000000啊,然后下面的n又因为*pnum的修改,加之因为%d输出,所以还是9啊,但是结果不是,打印出来的结果如下图所示:

结果与我们想的有很大的偏差。。。。。那就有必要让我们来了解浮点型数据的存储啦!

---------------------------------------------------------------------------------------------------------------------------------

1.首先,根据上面的实例,我们可以发现整型和浮点型数据的存储方法是不一样的!

2.那么浮点型数据是怎么存储的呢?

(1)根据国际标准IEEE(电子和电子工程协会)754,任意一个二进制浮点数V可以表示为下面的形式:

##       (-1)^S * M * 2^E

##       (-1)^S 表示符号位,当S=0时,V为正数;当S=1时,V为负数。

##        M 表示有效数字,且1<=M<2

##        2^E表示指数位

举例来说:十进制的 5.0,写成二进制是 101.0,相当于 1.01 * 2^2 。那么,按照上面的V的格式,可以得出S=0,M=1.01,E=2。

十进制的 -5.0,写成二进制是 -101.0 ,相当于 -1.01 * 2^2 。那么,S=1,M=1.01,E=2。

IEEE 754规定对于任意一个浮点数V都可以表示成V=(-1)^s * M *2^E,那我们是不是只要知道S、M、E三个值就可以确定一个浮点数?事实上,c语言内存存储浮点数时,也确实是只存储S、和指数E有关的一个值、和M有关的一个值(注意,这里不是直接存E、M)    详情如下:

相对应的float型是32位的,它的存储空间如下:

相对应的double型是64位的,它的存储空间如下:

对于M与E的特别规定:

E的使用:

所以我们再对刚才的代码加以解释:

1.首先我们先把n的补码写出来,因为n是正数,所以它的原反补相同。

2.按照上面的方法,把n的补码分解后发现它的E为全0,所以相当于一个无穷小的数字,所以此时*p为0.000000……

3.将*p改成9.0后按照上面的方法,先改成二进制 1001.1,然后写成 (-1)^0 * 1.001 * 2^3,最后按照格式变成补码,存到内存中去,此时补码为01000001000100000000000000000000,而n为整型数据,所以先取出这个补码,又因为其为正数,所以直接将补码转为十进制%d输出:

结果与我们之前执行的结果一致!

--------------------------------------------------------------------------------------------------------------------------------

浮点型数据存储是很重要的知识点,它也加强了我们对数据存储的了解!

详细浮点型数据的存储讲解相关推荐

  1. 【C语言】浮点型数据在内存中的存储方式

    目录 一. 前言 二. 问题的引出 三. 两类浮点型数据(float.double)在内存中的存储方式 3.1 两类浮点型数据的存储模型 3.1.1 浮点型数据数值读取的通用模型 3.1.2 floa ...

  2. 浮点型数据存储方式浅析

    学习目标: ①   搞懂float和double型数据的存储方式 ②   实现浮点型二进制和十进制的相互转换 ③   了解float和double类型的取值范围及其精度的由来 浮点型作为Java基础数 ...

  3. 【C++程序设计】2.1 浮点型数据有效位数的讨论

    浮点数的有效位数 浮点型数据的存储分为3部分,即符号位.指数部分和尾数部分.各种形式的浮点数在计算机中都变成了指数形式(例如0.12345e10),因此尾数部分实际上存放的是有效位数. 由上图可知 2 ...

  4. 赶紧进来修内功--- 详细讲解在内存中数据的存储方式(整形篇)

    本文详细介绍了所有整形家族类型的取值范围;整形数据在内存中的存储方式(大小端存储方式)以及对应的解析,介绍讲解判断当前机器的存储方式代码练习题,掌握后编程基础更进一步牢固!!! 数据的存储 一.整形数 ...

  5. c语言 浮点型数据怎么存放,C语言学习之浮点型数据存储

    C语言学习之浮点型数据 浮点数 浮点型数据分为单精度浮点型(float)和双精度浮点型(double). 单精度(float) 单精度浮点值 取值范围:1.2E-38 到 3.4E+38 精度:6 位 ...

  6. ztree树封装 json实例_小白7天入门PHP Web开发 - Day 6[下](综合)个人博客实例讲解用户数据的存储...

    <小白7天入门PHP Web开发>系列文章,面向单纯善良的完全不懂Web开发编程的入门速成课程,小白们如果感兴趣可以研读此系列文章,也可以连线提问.各路大神有何指教还请指点一二.希望各路大 ...

  7. java语言中的浮点型数据分为,Java语言中的浮点型数据根据数据存储长度和数值精度的不同,进一步分为float型和double型,其中dou...

    Java语言中的浮点型数据根据数据存储长度和数值精度的不同,进一步分为float型和double型,其中dou 更多相关问题 [单选题]下列因素中不是经济中内在稳定器的是 [单选题]外在时滞是以下哪两 ...

  8. 数据的存储(浮点型篇)

    目录 前言 一.例题引入 二.浮点数的存放规则 1.概念陈述 2.通过案例分析 1).转化为二进制 2).存放的特殊规则 3).读取时E的特殊规则 三.引例揭秘 四.浮点性存放精度丢失的问题 前言 在 ...

  9. 【数据的存储】浮点数在内存中的存储详解【超详细的保姆级别教程,让面试官心服口服】手撕浮点数存储使用方式

    [数据的存储]浮点数在内存中的存储详解[超详细的保姆级别教程,让面试官对你心服口服]手撕浮点数存储使用方式 作者: @小小Programmer 这是我的主页:@小小Programmer 在食用这篇博客 ...

最新文章

  1. source insight删除保存路径为中文的project工程项目报错的解决办法
  2. Stefan Tilkov:跳过单体应用,从微服务开始
  3. Java 集合系列10: HashMap深入解析(2)
  4. 使用redis incr计数来控制单位时间内对某接口的访问量
  5. python列表浅复制_Python列表深浅复制详解
  6. c#语言程序设计上机实验,C#语言程序设计基础实验指导(第3版)
  7. C语言 typedef - C语言零基础入门教程
  8. 这本京东断货王的Python神书,刷爆整个编程圈!| 测评
  9. C语言——恶搞关机小程序
  10. Java 类对象基础知识--科普
  11. 批量删除 Word 文件中的分页符
  12. Python爬取页游火线精英全区挑战排行榜
  13. 加拿大PCI GXL地理成像加速器-地理国情大显身手
  14. 美颜滤镜SDK有什么效果?美颜SDK可以自主开发吗?
  15. Ethereum非同质化通证(NFT)的编写与部署
  16. C++ 2.吃雪糕吗
  17. linux下登录ftp使用lftp命令详解
  18. 双向可控硅在交流调压电路中的使用
  19. 斐波那契数列(循环)
  20. 怎么查找和自己专业有关的英文文献?

热门文章

  1. 如何自己制作证件照片?照片怎么做成证件照?
  2. LightOJ1197 Help Hanzo(欧拉筛+区间素数)
  3. excel编辑csv文件
  4. win7怎么桌面显示计算机图标不见了,win7显示桌面图标不见了如何恢复【图文】...
  5. SQL注入原理及联合查询
  6. 中兴力维动环监控接线图_中兴力维传统动环监控系统解决方案
  7. 东北大学第二场算法题解报告
  8. bellman_ford
  9. 微信公众平人数多服务器会崩溃吗,微信公众号平台推新功能 再也不怕文章崩溃...
  10. Android Room,编译成功,倒是 build APK 失败提示: 无法访问:ActivityCompatApi23