浮点数在内存中的存储

本文介绍了浮点数(如float和double)的存储结构,包括符号位、指数(E)的存储方式,以及如何通过科学计数法转换。通过实例说明了整型和浮点型在打印时的不同处理方式。
摘要由CSDN通过智能技术生成

1、简单介绍:

2、M的存储:

        对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。这个就是float类型

        对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。这个就是double类型。

       ⼗进制的5.0,写成⼆进制是 101.0 ,相当于 1.01×2^2,。任意数如果用科学计数法表示,则一定可以表示成1.xxx *(进制)^E,既然这样,那么就规定E只存入小数点后面的数字,如上例子就是存入01。

3、E的存储:

        E是无符号类型,但是用科学计数法表示的数字指数有可能是负数,这该怎么存呢?规定E的真实值加上中间值存进E里。比如说float类型的数,float  a = 0.5;二进制就是1*2^-1,float类型的E有8位,中间值就是2*7-1——>127,存进E的就是-1+127=126

*注意*(float类型为例)

        E全为0,真实值就是1-127,写出来就是x*2^-127,有效数字M不再加上第⼀位的1,为0.xxxxxx的⼩数,这个数字非常小,接近零,同常表示无穷小的数或者零。

        E全为1,此时E是2*8-1,那么真实值再减一,就是128,写开就是1.xxx*2*128,这是个非常大的数。

4、练习:

        讲得差不多了,来个题练练手。

大家思考一下这个题

怎么样,和你想得一样吗?接下来讲一下这个

        int n = 9 这里n是个整型,存储形式是  00000000000000000000000000001001,用%d打印n自然是9,那么用%f打印呢,此时就认为是个float类型, 00000000  00000000000000000001001

        0是符号位,(-1)^0=1,表示是正数。00000000  是E,真实值是1-127=126,所以这个数非常小,认作是0。

        下面把9.0存入,此时认作是float类型。9.0的二进制是1001,科学计数法是1.001*2^3, 3+127作为E,所以存储形式是 0 10000010 00100000000000000000000,用%f打印自然是9.0.

        但是用%d打印就是将它看作整型,此时 0 10000010 00100000000000000000000 就是一个十分大的数。

        好了,今天的分享就到这里了,欢迎大家再评论区讨论。

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值