31天C语言进阶——2,数据存储:浮点数

1,float,double的内存

调试代码:

#include<stdio.h>
int main() {
    
    
	float a = 5.0f;
	double b = 5.0;

	return 0;
}

调试结果:

float:

在这里插入图片描述

double:

在这里插入图片描述

2,二进制小数

0.1代表2的-1次方,也就是0.5
0.01代表0.25
依次类推。0.11代表0.75

有些数值无法准确的表示,因为2的次方组合起来不能完全等于。

3,IEEE754标准

表示:二进制的科学计数法

符号位S:0正1负。
有效数字M:从左往右所有数字,从非0值开始。
位数E:小数点与第一个数字的距离。

举例:9.0,1001点0000。

S:0
M:1.001
E:3

存储:32位浮点数

1个S,8个E,剩下的23个M。
在这里插入图片描述

存储:64位浮点数

1个S,11个E,剩下的52个M。

在这里插入图片描述

SME

S:1位,0或1。
原封不动。

M:8或11位。
因为总是以1开头,故去掉,拿出来的时候补上。

E:无符号,23或52位。
为了表示有符号的数,要加上127或者1023。

4,float的5.0

101.0

S:0
M:101,去掉1变成:01,后面全部补0
E:2,加127变成129,也就是1000 0001

0
1000 0001
0100 0000 0000 0000 0000 000
=》
0100 0000 1010 0000 0000 0000 0000 0000

进制转换:https://www.osgeo.cn/app/s1653
2变16:
40 a0 00 00,和案例完全一致。

5,double的5.0

101.0

S:0
M:101,去掉1变成:01,后面全部补0
E:2,加1023变成1025,也就是10000000001

0
10000000001
0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
=》
0100 0000 0001 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

2变16:
40 14 00 00
00 00 00 00
和案例完全一致。

猜你喜欢

转载自blog.csdn.net/qq_37284843/article/details/124467023
今日推荐