详细浮点型数据的存储讲解
在引入知识之前,先来看一个案例,就知道了解浮点型数据存储的重要性与必要性。
举个例子:
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main()
{int num = 9;float *pnum = (float *)#//强制转换类型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输出:
结果与我们之前执行的结果一致!
--------------------------------------------------------------------------------------------------------------------------------
浮点型数据存储是很重要的知识点,它也加强了我们对数据存储的了解!
详细浮点型数据的存储讲解相关推荐
- 【C语言】浮点型数据在内存中的存储方式
目录 一. 前言 二. 问题的引出 三. 两类浮点型数据(float.double)在内存中的存储方式 3.1 两类浮点型数据的存储模型 3.1.1 浮点型数据数值读取的通用模型 3.1.2 floa ...
- 浮点型数据存储方式浅析
学习目标: ① 搞懂float和double型数据的存储方式 ② 实现浮点型二进制和十进制的相互转换 ③ 了解float和double类型的取值范围及其精度的由来 浮点型作为Java基础数 ...
- 【C++程序设计】2.1 浮点型数据有效位数的讨论
浮点数的有效位数 浮点型数据的存储分为3部分,即符号位.指数部分和尾数部分.各种形式的浮点数在计算机中都变成了指数形式(例如0.12345e10),因此尾数部分实际上存放的是有效位数. 由上图可知 2 ...
- 赶紧进来修内功--- 详细讲解在内存中数据的存储方式(整形篇)
本文详细介绍了所有整形家族类型的取值范围;整形数据在内存中的存储方式(大小端存储方式)以及对应的解析,介绍讲解判断当前机器的存储方式代码练习题,掌握后编程基础更进一步牢固!!! 数据的存储 一.整形数 ...
- c语言 浮点型数据怎么存放,C语言学习之浮点型数据存储
C语言学习之浮点型数据 浮点数 浮点型数据分为单精度浮点型(float)和双精度浮点型(double). 单精度(float) 单精度浮点值 取值范围:1.2E-38 到 3.4E+38 精度:6 位 ...
- ztree树封装 json实例_小白7天入门PHP Web开发 - Day 6[下](综合)个人博客实例讲解用户数据的存储...
<小白7天入门PHP Web开发>系列文章,面向单纯善良的完全不懂Web开发编程的入门速成课程,小白们如果感兴趣可以研读此系列文章,也可以连线提问.各路大神有何指教还请指点一二.希望各路大 ...
- java语言中的浮点型数据分为,Java语言中的浮点型数据根据数据存储长度和数值精度的不同,进一步分为float型和double型,其中dou...
Java语言中的浮点型数据根据数据存储长度和数值精度的不同,进一步分为float型和double型,其中dou 更多相关问题 [单选题]下列因素中不是经济中内在稳定器的是 [单选题]外在时滞是以下哪两 ...
- 数据的存储(浮点型篇)
目录 前言 一.例题引入 二.浮点数的存放规则 1.概念陈述 2.通过案例分析 1).转化为二进制 2).存放的特殊规则 3).读取时E的特殊规则 三.引例揭秘 四.浮点性存放精度丢失的问题 前言 在 ...
- 【数据的存储】浮点数在内存中的存储详解【超详细的保姆级别教程,让面试官心服口服】手撕浮点数存储使用方式
[数据的存储]浮点数在内存中的存储详解[超详细的保姆级别教程,让面试官对你心服口服]手撕浮点数存储使用方式 作者: @小小Programmer 这是我的主页:@小小Programmer 在食用这篇博客 ...
最新文章
- source insight删除保存路径为中文的project工程项目报错的解决办法
- Stefan Tilkov:跳过单体应用,从微服务开始
- Java 集合系列10: HashMap深入解析(2)
- 使用redis incr计数来控制单位时间内对某接口的访问量
- python列表浅复制_Python列表深浅复制详解
- c#语言程序设计上机实验,C#语言程序设计基础实验指导(第3版)
- C语言 typedef - C语言零基础入门教程
- 这本京东断货王的Python神书,刷爆整个编程圈!| 测评
- C语言——恶搞关机小程序
- Java 类对象基础知识--科普
- 批量删除 Word 文件中的分页符
- Python爬取页游火线精英全区挑战排行榜
- 加拿大PCI GXL地理成像加速器-地理国情大显身手
- 美颜滤镜SDK有什么效果?美颜SDK可以自主开发吗?
- Ethereum非同质化通证(NFT)的编写与部署
- C++ 2.吃雪糕吗
- linux下登录ftp使用lftp命令详解
- 双向可控硅在交流调压电路中的使用
- 斐波那契数列(循环)
- 怎么查找和自己专业有关的英文文献?
热门文章
- 如何自己制作证件照片?照片怎么做成证件照?
- LightOJ1197 Help Hanzo(欧拉筛+区间素数)
- excel编辑csv文件
- win7怎么桌面显示计算机图标不见了,win7显示桌面图标不见了如何恢复【图文】...
- SQL注入原理及联合查询
- 中兴力维动环监控接线图_中兴力维传统动环监控系统解决方案
- 东北大学第二场算法题解报告
- bellman_ford
- 微信公众平人数多服务器会崩溃吗,微信公众号平台推新功能 再也不怕文章崩溃...
- Android Room,编译成功,倒是 build APK 失败提示: 无法访问:ActivityCompatApi23