C/C++中float和double的存储结构
来源:互联网 发布:淘宝药物 编辑:程序博客网 时间:2024/06/05 08:28
http://blog.sina.com.cn/s/blog_8a18c33d01013bke.html
在C/C++中float是32位的,double是64位的,两者在内存中的存储方式和能够表示的精度均不同,目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算。
无论是float还是double,在内存中的存储主要分成三部分,分别是:
(1)符号位(Sign):0代表正数,1代表负数
(2)指数位(Exponent):用于存储科学计数法中的指数部分,并且采用移位存储方式
(3)尾数位(Mantissa):用于存储尾数部分
对于两者在内存中的存储结构,如下图所示:
9的二进制表示为1001
0.125的二进制表示为0.001
所以91.25的表示成1001.001
在计算机中,任何一个数都可以表示成1.xxxxxx*2^n 这样的形式,
其中xxxxx就表示尾数部分,n表示指数部分
其中,因为最高位橙色的1这里,由于任何的一个数表示成这种形式时这里都是1,所以在存储时实际上并不保存这一位,这使得float的23bit的尾数可以表示24bit的精度,double中52bit的尾数可以表达53bit的精度。
最终根据上面图中float的存储结构可以知道,实际上9.125在计算机中:
上面的二进制数转换成十六进制后表示形式为:01000001 00010000 00000000 00000000 --> 41 10 00 00
实际上在X86计算机中,采用的是小端存储方式,即低地址存储低位数据,高地址存储高位数据。
所以数据应该是这样存储的:
对于double类型的存储方式实际上和float是类似的,只是存储的位数不同,在原理上都是一样的。这个可以参考这篇http://www.linuxidc.com/Linux/2012-07/65987.htm
- C/C++中float和double的存储结构
- C/C++中float和double的存储结构
- C/C++中float和double的存储结构
- C/C++中float和double的存储结构
- C/C++中float和double的存储结构
- C/C++中float和double的存储结构
- C/C++中float和double的存储结构
- C/C++中float和double的存储结构
- c/c++中float和double类型的存储
- C语言中float和double的精度
- 关于C中float和double的一些问题
- C语言中float,double类型,在内存中的结构(存储方式).
- 转载:C语言中float,double类型,在内存中的结构(存储方式)
- C语言中float,double类型,在内存中的结构(存储方式).
- C/c++语言中 float double在内存中的存储结构详解
- c/c++: float和double、long double
- c/c++: float和double、long double
- C语言中float,double类型,在内存中的结构
- Javascript模块化编程(三):require.js的用法[require]
- SQL SERVER 附加数据库显示为只读的解决方案
- 关于密钥管理的几个设计原则
- 解决KinectSDK包含头文件报错问题
- spring源码学习笔记-初始化(二)-BeanFactory
- C/C++中float和double的存储结构
- 在web.xml配置错误信息跳转页面
- ceilometer启动认证失败
- 学习OpenCL的一些心得
- FastDb client-server模式
- VLC的相关网址
- 在Windows平台下修改Oracle实例不随服务启动
- spring源码学习笔记-初始化(三)-BeanFactory
- java.lang.UnsatisfiedLinkError: Native method not found问题