float浮点数的二进制存储方式及转换

在这里,我就不解释那些ieee的术语,因为大家只要一搜索,到处都有。这里我用一个直观的实例解释float浮点数在intel机器上的存储方式,并给出计算方法,让人能一目了然的明白如何将二进制存储的浮点数的转换成我们常见的十进制形式,并解释为何有的浮点数不能被精确表示,如12.34常常被表示为12.3400001526。

 

对于十进制数12.34如何转换成二进制存储的浮点数,我们需要分3步走

1、先将12.34转换成二进制表示,整数和小数部分分别单独转换

整数部分是不停的除二,将余数由后向前排列

即12=1100

小数部分是不停的乘二,将乘积的整数部分由前向后排列

即0.34=0.01010111......,我们发现小数部分*2永远乘不尽,就是说不可能出现没有小数的时候,所以此浮点数就无法被精确的转换成二进制。

将整数与小数部分合并得,12.34的二进制表示即 12.34->1100.01010111......

 

2、将二进制数1100.01010111用科学计数法表示成:

1100.01010111->1.10001010111*(2的3次方)

 

 

此时就可以将上面的二进制位填入下表中了

32位

整个浮点数共需要32位共4个字节来表示

31位为符号位,1代表负数,0代表正数,数字0的此位同正数

23~30位共8个字节,存储的是科学计数法的指数,即二的多少次方,上例为3

0~22为共23个字节,存储的是科学计数法的小数部分,因为根据科学计数法,整数部分总为1所以存储时可省略,以便多出一位来表示

即12.34->10100100 01110000 01001010 01000001

顺序的表示就是A4 70 45 41

 

3、此步就是将上面的字节顺序翻转过来,变成41 45 70 A4。

为什么要翻转?

因为在intel机器中,我们内存中使用的是小头字序,就是说低字节的放到前头,哪个方向是前头?

就是我们内存表示时是这样的

0字节 1字节 2字节 3字节 4字节 5字节.......

低字节在前面

所以上面的字节在内存中的正确排序是

41 45 70 A4

跟纸上表示正好倒过来了,谁叫我们纸上表示时把高字节放到前面呢!!!

 

 

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值