浮点数在内存中的存储
我们已经介绍过整数在内存中的存储方式,那浮点数在内存中是怎样存储的呢?
先看一段代码:
#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字节
浮点数在内存中的存储相关推荐
- C/C++浮点数在内存中的存储方式《转》
那天有人在汇编群里有人问了一个 #include <iostream> #include <stdio.h> using namespace std; int main() { ...
- IEEE754标准: 浮点数在内存中的存储方式
一. 什么是IEEE754标准 我们知道, 计算机内部实际上只能存储或识别二进制. 在计算机中, 我们日常所使用的文档, 图片, 数字等, 在储存时, 实际上都要以二进制的形式存放在内存或硬盘中, 内 ...
- 浮点数在内存中的存储——“C”
各位CSDN的uu们你们好呀,今天,小雅兰的内容是浮点数在内存中的存储,昨天我们已经写过了整型在内存中的存储,那么,浮点数在内存中是怎样存储的呢?现在,就让我们进入浮点数在内存中的存储的世界吧 常见的 ...
- 详解浮点数在内存中的存储
目录 前言 一. 32 位单精度浮点数在内存中的存储 1.1 - 符号位 sign 1.2 - 偏移后的指数位 biased exponent 1.3 - 尾数位 fraction(mantissa) ...
- 浮点数在内存中的存储规则
引子: 阅读一段代码: int n = 9; //以整数的形式存储float* pFloat = (float*)&n;printf("%d\n", n); //输出 9p ...
- 【数据的存储】浮点数在内存中的存储详解【超详细的保姆级别教程,让面试官心服口服】手撕浮点数存储使用方式
[数据的存储]浮点数在内存中的存储详解[超详细的保姆级别教程,让面试官对你心服口服]手撕浮点数存储使用方式 作者: @小小Programmer 这是我的主页:@小小Programmer 在食用这篇博客 ...
- 详谈单精度浮点数在内存中的存储及其误差问题
本文主要对单精度浮点数的范围大小进行一些简单的讨论. 分为五部分: 一.单精度浮点数的取值范围 二.单精度浮点数在内存中的存储形式 三.单精度浮点数的范围及其实现原理的关系 四.单精度浮点数在计算中造 ...
- C/C++浮点数在内存中的存储方式
任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100.则在Intel CPU架构的系统中,存放方式为 10000100(低 ...
- 【C语言进阶】③探究浮点数在内存中的存储方式
文章目录 一.例题 二.浮点数在内存中存储方式 2.1国际标准IEEE(电气和电子工程协会)754规定: 2.2实际上,浮点数在内存的存储形式为: 2.3具体M和E是怎么算的呢? 三.题解 3.1刚开 ...
最新文章
- nohup-真正的Shell后台运行
- HDU 2112 HDU Today (dijkstar + map)
- enum的介绍以及和#define的区别
- BOA+CGI+SQLite 随笔
- java垃圾回收机制算法分析
- 编译和链接的区别、makefile怎么写
- Android_自定义水波纹菜单弹出效果
- Centos7 Zabbix3.2安装(yum)
- BZOJ 2839: 集合计数 解题报告
- gimp中文版教程_GIMP中详细教程.pdf
- Android 11 inputflinger分析(触摸优先级)
- 这份公众号运营攻略,可以帮你系统地运营好公众号
- 索尼sw2刷android wear,索尼SW2改进不错 体验很舒适_索尼 SmartWatch SW2_GPS评测-中关村在线...
- DOS命令/批处理文件大全
- android手机存储空间猛增,为什么安卓手机运行内存和储存空间增长速度这么快,什么原因呢?...
- simulink他励直流电动机串电阻启动仿真
- oracle中得到当前系统时间
- Phantomjs对vue进行seo优化
- input框动态模糊查询,能输入,能选择
- RHEL8【基础篇】 更改hostname