当前位置:网站首页>【C语言】浮点型在内存的存储
【C语言】浮点型在内存的存储
2022-07-17 10:21:00 【安苒_】
一、浮点数存储规则
1.常见的浮点数
3.14159——普通
1E10——科学计数法形式
2.存储规则
根据IEEE754标准,任意一个二进制浮点数V可以表示成下边的形式:
(-1)^S*M*2^E其中(-1)^S 表示符号位,S取1为负数,S取0位正数
M表示有效数字,大于等于1,小于2【由于二进制的原因,所以1<=M<2】
2^E表示指数位【计算机二进制存储模式,E是次方】
IEEE 754****规定:
对于32位的浮点数,最高的1位是符号位s,接着的
8位是指数E,剩下的23位为有效数字M。——32=23+8+1对于64位的浮点数,最高的1位是符号位S,接着的
11位是指数E,剩下的52位为有效数字M。——64=52+11+1·由于M取值范围很小,所以存储时会将整数部分1和小数点
.,在取出数据的时候再将他们添上,提升存储效率。对于E需要注意两点——
①类型为无符号整数
如果E为8位,它的取值范围为0255;如果E为11位,它的取值范围为02047
所以IEEE 754规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023【并且以二进制形式存,这里就不需要考虑原反补什么了(但其实正数也不需要考虑这些计算,都是一毛一样的)】
比如说2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137
也就是27+23+2^0即1000 1001
②E是否全为0是否全为1
E不全为0或不全为1——正常值
E全为0——无穷小
E全为1——无穷大
OK,让我们来再来想一遍浮点数的存储规则到底是什么?
首先,浮点数表示规则为指数E的计算值减去127/1023得到,得到真实值,有效数字M前加上1.,S为0为正数,为1位负数;
其次,float型1个是符号位,8个是指数位,23个是有效位;double型1个符号位,11个指数位,52个有效位;
再然后,E全为0表示无穷小,全为1表示无穷大,E还是一个无符号整数,储存的时候还需要加上中间值127/1023【助记128(2的7次方)、1024(2的10次方)】
**最后,在此重申——表示形式为(-1)*S*M*2^E**
例子
1)5.0f----->101.0------->1.01*2^2
2)9.5f----->1001.1f----->1.0011*23【这里特别注意权重的问题,小数点一直向左权重分别为20,21,22……,小数点一直向右权重分别为2-1,2-2,2^-3……】
3)9.6f----->1001.100……不能准确渠道
二、练习题
1.思考题
为什么无法精确保存分数的值?
浮点数的储存时的有效数字为是有限的,能够保存的位数总是有限的,所以无法精确保存。
2.程序题
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;
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P5TYRVzH-1657982776143)(C:\Users\19271\AppData\Roaming\Typora\typora-user-images\image-20220716223547288.png)]](/img/28/a2de7cc86116dd26daf94a984f58b3.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7x0nwfRc-1657982776144)(C:\Users\19271\AppData\Roaming\Typora\typora-user-images\image-20220716220821163.png)]](/img/a5/5e360fb0a1b3425dd9372cc29d0a3b.png)
边栏推荐
- R语言ggplot2可视化分面图(faceting):ggplot2可视化分面图并移除分面图之间的边框线、以及分面图之间的间隙(Remove Spacing between Panels)
- Markdown (5): anchor link
- Yanrong technology was selected as Beijing's "specialized and innovative" in 2022 to lead hybrid cloud file storage
- C51 常见数据类型详解
- Go-Excelize API源码阅读(二)——OpenFile()
- Vector容器的系列操作( 详解 )
- Encapsulation API, request interception, response interception, authentication timeliness
- Development utility
- 力扣(LeetCode)197. 上升的温度(2022.07.16)
- How to build your own cloud database in docker
猜你喜欢

Target detection model size calculation, model complexity (parameter conversion formula)

SSM implementation of one-to-one query detailed tutorial (1)

Simple case of wechat applet calling API

Un7.16: how to deploy projects on code cloud and invite team members?

un7.16:如何在码云上部署项目并邀请组员?

Log desensitization - Reference

MySql数据是如何存储在磁盘上存储的?

Makefile中在命令前加上- 则忽略该命令产生的错误,继续执行下一条命令

【性能优化方法论系列】六、总结

C语言基础篇 —— 2-1 指针与野指针
随机推荐
多租户 SaaS 的数据库设计模式,你学废了吗?
代码随想录:刷题记录(更新中)
【摸鱼神器】UI库秒变低代码工具——表单篇(二)子控件
Latest fruit flstudio20.9 low version upgrade high version tutorial
2、 Pinda general permission system__ Project construction
静态路由!!静态路由!!静态路由!!
Utility series - xshell installation, download and use
【微服务~高级】配置中心实战
Jsp+servlet+mysql case
代码庆端午--粽你心意
开发实用工具
电脑拨号上网
AnyControl Demo演示
How to build your own cloud database in docker
How is MySQL data stored on disk?
[英雄星球七月集训LeetCode解题日报] 第17日 宽搜
uniapp仓库管理系统源码
MySQL initialization and password modification
Scope and lifecycle of beans
Line Flow Based Simultaneous Localization and Mapping