float浮点/double双精度浮点和二进制的相互转换,小白也能看明白!

二进制文件包含了太多的数据,如何看懂二进制文件,决定于基础。


前言

`提示:无规矩不成方圆,我们先看一下IEEE754对float和double的约束,点击查看

1、重点知识

1.1何为二进制文件

二进制文件,故名思意就是进制为2的文件。

1.2浮点和双精度的浮点如何生成二进制

在没有统一之前,各个公司对其的操作方式不一,导致系统间的耦合性非常低。那么自然需要形成一个统一的局面。IEEE 754自然应运而生,形成了一套约束方案。

1.2.1 float和double的基础知识
名称字节长度对应位数
float4字节32位
double8字节64位
1.2.2 IEEE754约束的重点
名称符号位Sign长度Expont指数Fraction小数长度位元长度e
float1需计算需计算8
double1需计算需计算11

这里先说明一下:指数偏移值(exponent bias),即浮点数表示法中指数域的编码值,等于指数的实际值加上某个固定的值。e为存储指数的位元的长度。

1.2.3 浮点是如何表示二进制

在这里插入图片描述

1.3 例子说明

-------------------------------
这里是伪代码,只做逻辑上面的说明!
-------------------------------
1、将float 类型的3.14转换成二进制,该如何思考?
/**
首先将3.14拆解成3和0.14两个部分。
整数部分3对应的二进制:0011
小数部分0.14该如何转换成二进制呢?计算的时候为什么要乘以2取整数作为二进制的数呢?下面我们看一个说明:
0.14里面有多少个0.5  0.14/0.5=0.14*2=0.28 结果是0个
0.14里面有多少个0.25  0.14/0.25=0.14*4=0.56 结果是0个
0.14里面有多少个0.125 0.14/0.125=0.14*8=1.12 结果是1个,此时满2进1了。
(0.14-0.125)里面有多少个0.0625  0.015/0.0625=0.015*16=0.24  结果为0
以此类推~,知识变换了一种方式,整数部分除以2,小数部分乘以2
我们类比一下十进制的数:100.1 整数部分有10个10(100/10),小数点0.1有1个十分之一
我的理解:计算机没有特定存储小数,只是变化了一种方式。
**/

在这里插入图片描述

通过1.2.3的介绍,我们整合的结果为:11.0010001111010111000011 ,将其转化成指数形式:1.1.0010001111010111000011*2^1
在IEEE中规范,在二进制,第一个有效数字必定是“1”,因此这个“1”并不会存储。

符号位sign:正数为0,负数为1 此题的符号位为:0
Exponent:指数位1,但实际值=指数值加上固定偏移值2^(位元长度8-1)-1=127,十进制数位127+1=128,其二进制结果位:10000000
Fraction长度(32-1(符号位长度)-8(位元长度)-exp因子数):22
eg:这里说明一下整数3的二进制为11占用了两位,32位-位元长度8-符号位长度-整数部分占用的位数,则为22位!

最后我们整合为:浮点3.14的二进制结果为:0 10000000 10010001111010111000011 ,
方便阅读,从右到左每4位进行组合:0100 0000 0100 1000 1111 0101 1100 0011
转化成十六进制则为:0x4048f5C3

双精度double的转换方式一样,可以参考float的说明。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值