我们已经介绍过整数在内存中的存储方式,那浮点数在内存中是怎样存储的呢?

先看一段代码:

#include<stdio.h>int main()
{int n = 9;float* pFloat = (float*)&n;printf("n 的值为:      %d\n", n);printf("*pFloat 的值为:%f\n", *pFloat);*pFloat = 9.0;printf("num值为:       %d\n", n);printf("*pFloat值为:   %f\n", *pFloat);return 0;
}

是不是会觉得是

9

9.0

9

9.0

运行之后:

发现我们的猜想是不对的,那为什么会是这样的结果呢,先搜索一下浮点数在内存中的内存规则:

存储一个浮点数也是占用了32字节。并且把这32字节分为了3部分。用5.5这个浮点数举例子:

S:

如果浮点数为正则为0,负则为1        (-1)^s

那S的位置就是        0

E:

我们都知道在内存中用0和1来存储。

在浮点数存储规则中,那实际上5.5可以分为小数点前的5.0和小数点后的0.5

5.0可以表示为:101

0.5是2的-1次方

那5.5就是1.011*2^2就是1.011  乘以  2的2次方

如果写成这样科学计数法的方式,小数点前的1就不需要存储了,因为任何数用科学计数法表示肯定都是1.xxx乘以2的几次方的形式

为了使表达的数字更精确,这里的E用的是unsigned int的数表示的。用8位来存储

那本来8个字节可以表示的范围是-128~127

这样一来,就可以表示0~255

那如果是负数就+127

就像这里保存2实际上保存的是2+127=129

即:10000001

那E的位置就是        10000001

M:

M保存的就是剩下的011了

那剩下的23位,我们规定从左到右使用

那M的位置就是:01100000000000000000000

合起来就是:01000000101100000000000000000000

那再来看刚开始的代码:

n=9在内存中存储为:00000000 00000000 00000000 00001001

那S读出来是0 E读出来是0 M读出来是一个很小很小的数

转换完就是(-1)^0        *        1001        *        2^(-127)

这是一个很小很小的数,所以会打印出0.0000000000

那用浮点数规则存储9.0

S保存的就是:0

9.0就是1001.0,就是1.001*2^3

E保存的就是130 即:10000010

M保存的就是00100000000000000000000

合起来就是:01000001000100000000000000000000

用计算器计算得到:

与上面计算的结果相同。

总体上来说:

S:表示浮点数的正负

E:代表是2的几次方。

M:存储小数点后面的数字

S占1字节,E占8字节,M占23字节

浮点数在内存中的存储相关推荐

  1. C/C++浮点数在内存中的存储方式《转》

    那天有人在汇编群里有人问了一个 #include <iostream> #include <stdio.h> using namespace std; int main() { ...

  2. IEEE754标准: 浮点数在内存中的存储方式

    一. 什么是IEEE754标准 我们知道, 计算机内部实际上只能存储或识别二进制. 在计算机中, 我们日常所使用的文档, 图片, 数字等, 在储存时, 实际上都要以二进制的形式存放在内存或硬盘中, 内 ...

  3. 浮点数在内存中的存储——“C”

    各位CSDN的uu们你们好呀,今天,小雅兰的内容是浮点数在内存中的存储,昨天我们已经写过了整型在内存中的存储,那么,浮点数在内存中是怎样存储的呢?现在,就让我们进入浮点数在内存中的存储的世界吧 常见的 ...

  4. 详解浮点数在内存中的存储

    目录 前言 一. 32 位单精度浮点数在内存中的存储 1.1 - 符号位 sign 1.2 - 偏移后的指数位 biased exponent 1.3 - 尾数位 fraction(mantissa) ...

  5. 浮点数在内存中的存储规则

    引子: 阅读一段代码: int n = 9; //以整数的形式存储float* pFloat = (float*)&n;printf("%d\n", n); //输出 9p ...

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

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

  7. 详谈单精度浮点数在内存中的存储及其误差问题

    本文主要对单精度浮点数的范围大小进行一些简单的讨论. 分为五部分: 一.单精度浮点数的取值范围 二.单精度浮点数在内存中的存储形式 三.单精度浮点数的范围及其实现原理的关系 四.单精度浮点数在计算中造 ...

  8. C/C++浮点数在内存中的存储方式

    任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100.则在Intel CPU架构的系统中,存放方式为  10000100(低 ...

  9. 【C语言进阶】③探究浮点数在内存中的存储方式

    文章目录 一.例题 二.浮点数在内存中存储方式 2.1国际标准IEEE(电气和电子工程协会)754规定: 2.2实际上,浮点数在内存的存储形式为: 2.3具体M和E是怎么算的呢? 三.题解 3.1刚开 ...

最新文章

  1. nohup-真正的Shell后台运行
  2. HDU 2112 HDU Today (dijkstar + map)
  3. enum的介绍以及和#define的区别
  4. BOA+CGI+SQLite 随笔
  5. java垃圾回收机制算法分析
  6. 编译和链接的区别、makefile怎么写
  7. Android_自定义水波纹菜单弹出效果
  8. Centos7 Zabbix3.2安装(yum)
  9. BZOJ 2839: 集合计数 解题报告
  10. gimp中文版教程_GIMP中详细教程.pdf
  11. Android 11 inputflinger分析(触摸优先级)
  12. 这份公众号运营攻略,可以帮你系统地运营好公众号
  13. 索尼sw2刷android wear,索尼SW2改进不错 体验很舒适_索尼 SmartWatch SW2_GPS评测-中关村在线...
  14. DOS命令/批处理文件大全
  15. android手机存储空间猛增,为什么安卓手机运行内存和储存空间增长速度这么快,什么原因呢?...
  16. simulink他励直流电动机串电阻启动仿真
  17. oracle中得到当前系统时间
  18. Phantomjs对vue进行seo优化
  19. input框动态模糊查询,能输入,能选择
  20. RHEL8【基础篇】 更改hostname

热门文章

  1. 学习笔记01-安全术语
  2. tiger 词法分析实现
  3. 每天一个linux命令:chgrp
  4. 阅读笔记:黑碳对于冰雪辐射效应的影响
  5. $html = %3c%3c%3cstr,浏览器安全 / Chrome XSS Auditor bypass
  6. sql server 2008创建修改sa用户密码
  7. Idea2020创建一个Servlet
  8. 我的世界服务器怎么发全部消息,我的世界服务器指令
  9. 微信小程序开发跳坑指南(51-100)
  10. 产品设计:《室内设计》