0
点赞
收藏
分享

微信扫一扫

浮点数的存储规则【带案列讲解,轻松理解浮点数的存储规则】

产品喵dandan米娜 2022-03-12 阅读 24

文章目录

前言

浮点数转换为二进制形式

浮点数在内存中的存储规则

  • (-1)^S * M * 2^E

  • (-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。

  • M表示有效数字,大于等于1,小于2。

  • 2^E表示指数位。

有效数字 M的存储规定

指数E的存储规定

案例分析

案列

int n = 9; 
float* p = &n;
printf("n = %d\n", n);
printf("*p = %f\n", *p);
*p = 9.0;
printf("n = %d\n", n);
printf("*p = %f\n", *P);

但当我们了解了浮点数在内存中的存储规则的时候,我们就回发现其实并不是这样。实际上的程序运行结果其实是:
在这里插入图片描述

原因

9 -> 0000 0000 0000 0000 0000 0000 0000 1001
V=(-1)^0 × 0.00000000000000000001001×2^(-126) = 1.001×2^(-146)
9.0 -> 1001.0 ->(-1)^01.0012^3 -> s=0, M=1.001,E=3+127=130

那么,第一位的符号位s=0,有效数字M等于001后面再加20个0,凑满23位,指数E等于3+127=130,即10000010。所以,写成二进制形式,应该是s+E+M,即

0 10000010 001 0000 0000 0000 0000 0000

这个32位的二进制数,还原成十进制,正是 1091567616 。

总结

举报

相关推荐

0 条评论