9.5日 学习浮点数的存储方式有感

这个例子就可以说明浮点数和整形类型的数据存储方式是不一样的   因此当你以不同的方式打印的时候,获取数据的方式也不一样。比如一个整形数据以浮点数的形式打印的话就会变成一个浮点数

浮点数也一样  

所以我们要刨根看底 去探究一下浮点数在内存中究竟是如何存储的

首先浮点数v都可以表示成       (-1)^s*M*2^E       当v为正数时   s为0,当为负数时s为1

M是用科学计数法表示的  ,范围为1-2     E即为移动了几位,如果浮点向左移动几位 E为正数  

如果浮点向右移动几位E为负数     

首先来讲讲浮点数是如何存储的   

如果为float类型  即32个bit位时,第一位为s   后面八位为 E  后面的23位为M

对于double类型的浮点数来说   有64个比特位   第一位为s  后面11位为E 后面的52位为M

遗憾的是。不是每个浮点数都可以被精准的存储到内存中的

因为浮点数也是用二进制存储的 。总会有一些小数没办法精准存储

反正M都是1.  xxxxxx,干脆就不存小数点前面的位 ,只存小数点后面的位    这样就可以多存一位有效数字 ,可以存24个有效数字

首先E为无符号整数,但是我们知道科学计数法中的e是可以出现负数的  ,浮点向左移动E为正数,小数点向右移动E为负数  ,
所以我们在存储时需要用到一些中间值   当为32bit位时,中间值为127    当为64bit位时中间值为1023

float类型的中间值是127,double类型的的中间值是1023,都是为了方便存储E比如你如果想表示E为-1,当你以foloat类型存储时,实际上它存储的值是126
当你想以double类型存储E时实际上存储的是1022这个值  这是放到内存的方式

就是这样存的   比如小数点后面的 011   就直接存进去  后面的全部补0
不能前面补0,只能在后面补0数值才不会变

-----------------------------如何把浮点数从内存取出来
这个就比较的麻烦了

首先看E的那八位bit或者11位bit位  是否为全1或者全0

如果不是全1或全0     存储数-中间值   的到真实值   再将有效数字M前面加上第一位的1

全为0的话  那么此时  E直接为-126或者-1022   即为真实值 且 M无需加上那个1

全为一表示正负无穷大  ,正负看第一个符号位s

原来是这样子 ,浮点数跟整形虽然都是使用的二进制,但是他俩读取的方式不一样  ,也就是存储的方式不一样
但是只要是超过一个字节的存储,也都有大小端的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值