浮点数在内存中的存储方式

存储 存储软件
C语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?

 C语言中浮点数在内存中的存储方式

C语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢? 

float在内存中的存储方式如下图所示: 

double在内存中的存储方式如下图所示: 

无论是单精度还是双精度在存储中都分为三个部分: 

1.符号位(Sign) : 0代表正,1代表为负 

2.指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储 

3.尾数部分(Mantissa):尾数部分

首先来看float类型(以2.25为例)

步骤一:符号位(占1个bit位)的数值 

很容易看出此数为正数,因此符号位为0。 

步骤二:指数位(占8个bit位)的数值 

***步:先将十进制的2.25转换成二进制0100.01; 

第二步:将100.01用二进制的科学计数法表示为1.001; 

第三步:将第二步所得数值写成指数形式1.001*(2^2); 

第四步:将指数数值2+127=129,将129转化成二进制形式(1000 0001)写到指数部位。 

步骤三:尾数部分(占23个bit位)的数值 

将步骤二第二步中所得的数1.001,小数点后的三位数001写到指数部位,剩下的位用0补齐即可。 

所以单精度浮点数2.25在内存中的表示方式为: 

0 1000 0001 00100000000000000000000

再来看double类型(还是以2.25为例)

步骤一:符号位(占1个bit位)的数值 

很容易看出此数为正数,因此符号位为0。 

步骤二:指数位(占11个bit位)的数值 

***步:先将十进制的2.25转换成二进制0100.01; 

第二步:将100.01用二进制的科学计数法表示为1.001; 

第三步:将第二步所得数值写成指数形式1.001*(2^2); 

第四步:将指数数值2+1023=1025,将129转化成二进制形式(100 0000 0001)写到指数部位。 

步骤三:尾数部分(占52个bit位)的数值 

将步骤二第二步中所得的数1.001,小数点后的三位数001写到指数部位,剩下的位用0补齐即可。 

所以双精度浮点数2.25在内存中的表示方式为: 

0 100 0000 0001 0010000000000000000000000000000000000000000000000000

责任编辑:武晓燕 来源: 京鸿智武
相关推荐

2020-10-12 06:38:08

存储定点数

2020-09-15 12:57:46

C 语言浮点数内存

2023-07-05 08:00:58

Redis数据库

2017-10-16 10:42:27

前端JavaScript浮点数

2011-05-25 14:10:38

浮点数

2018-02-24 12:17:56

C程序内存方式

2015-12-02 10:21:34

JavaScript浮点数精度调整

2010-07-22 17:39:44

2021-10-19 14:04:28

C++类型数字

2010-01-15 15:21:35

C++

2009-05-19 10:10:01

Oracle时间加减时间操作

2021-11-15 09:32:06

浮点面试Java

2022-06-15 15:44:21

无损数据压缩鸿蒙

2019-01-07 10:24:41

2022-08-06 16:33:01

C语言数组内存

2022-09-16 07:24:12

Python 的四舍

2023-11-08 13:32:00

JavaScript浮点数计算

2024-01-18 08:38:34

.NET数组内存管理

2020-09-18 09:16:37

Redis缓存内存

2010-05-27 10:05:08

EhcacheJava云计算
点赞
收藏

51CTO技术栈公众号