float浮点数的二进制存储方式图解

首先先讲怎么将小数转换成二进制数字(两个实例)

1、对于数字 80.125,怎么将其转换成二进制呢?

对于整数部分 80 转换成二进制,就是 1010000

而对于小数部分 0.125,可以看下面的图( 一直乘 2 ,遇到 1 退出。如果乘 2 之后的数字大于 1,则减去 1 )
在这里插入图片描述
所以 0.125 转换成小数就是 0.001

所以 80.125 转换成的二进制数就是1010000.001

2、对于数字 12.2,怎么将其转换成二进制呢?

对于整数部分 12 转换成二进制,就是 1100

而对于小数部分 0.2 ,可以看下面的图( 一直乘 2 ,遇到 1 退出。如果乘 2 之后的数字大于 1,则减去 1 )
在这里插入图片描述
所以 0.2 转换成小数就是 0.0011001100110011…( 0011 无限循环,因为不管乘多少次 2 都不可能遇到 1 )

所以 12.2 转换成的二进制数就是1100.00110011001100110011…

接下来讲怎么将浮点数转换成二进制存储(两个实例)

先看一下 float 的存储结构,如下图所示

在这里插入图片描述
1、假设有个浮点数 -12.75 ,我们把它转换成二进制

因为它是负数,所以符号位就是 1 (相反,正数的话符号位就是 0 )

我们先将 12.75(忽略负号)转换成二进制小数 1100.11 (这里不明白怎么转换的,再去看看上面两张图)

然后再将这个二进制小数转换成科学计数法 1.10011 *2^3 ,这时候我们就得到了尾数部分,为小数部分 10011,后面补 0,占满23位,即 10011000000000000000000

最后,我们只差指数位没有填进去了,理所当然的,指数位就是要把 2^3的指数 3 填进去,怎么填进去呢(注意:指数也有可能是负数)

填进去的方法就是 加上127 然后 转 2 进制 再填进去,具体就是 3 + 127 = 130 => 10000010

在这里插入图片描述
2、接下来我再来讲个特殊情况,假如浮点数 0.2 怎么转化成二进制

首先将其转化成二进制小数 0.0011001100110011…( 小数部分 0011 无限循环 )

然后再转化成科学计数法 1.100110011001100110011… * 2^(-3)

因为数字是正数,所以符号位是 0

指数位是 ​​​​​​​​​​​​​​2^(-3) 的指数 -3 加上127 然后 转 2 进制,即 -3 + 127 = 124 => 01111100

尾数部分是 10011001100110011001100 ( 这里本应该是 1 0011 0011 0011 无限循环,但由于尾数部分只有 23 位,所以超出部分直接截去,这也是有时候浮点数不精确的原因 )

所以最终得到的就是
在这里插入图片描述
原文链接:https://blog.csdn.net/cry_shoulder/article/details/104806622

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值