浮点数转二进制

浮点数有两种:单精度float(4字节) 和 双精度double(8字节)

浮点数在计算机按照 “公式” 的存储格式为:

公式约定:123.123(10) 表示十进制123.123

举例:123.125(10) 分开 “整数” 和 “小数” 两部分来转二进制

123(10)转二进制是:0111 1011(2)
0.125(10)转二进制是:011(2)
0.125 * 2 = 0.25------0
0.25 * 2 = 0.5----------0
0.5 * 2 = 1.0-------------1
(具体转化规则不做详细解释)

根据上面两段生成的是:111 1011.001(2)
用科学记数法表示:1.111011001 * 2^6

不要 1. 剩下的111011001就是尾数(M),
为什么不要1. 呢?是因为1. 是肯定会有的,所以直接被省略了,取数时候会自动加上1. 来计算

指数(E)=6+127 = 133(10) = 1000 0101(2)
6就是1.111011001 * 2^6 的 6
127由来:因为float的指数(E)是8位,所以根据2^(8-1) - 1 = 127

为什么要指数(E)是6+127呢?
因为指数可能有负数即6也有可能是-6,所以要加上一个数,方便计算,而加上的这个数是根据float和double约定好的固定值。( double的指数(E)是11位,所以如果是double,就要将127改为2^(11-1) - 1 = 1023 )

符号(S):正数 = 0,负数 = 1
所以123.125 = 0 10000101 1110110010000000000000

结果图?
结果图还有两种特殊情况:
1):E全为0。由上面指数(E)的逻辑可以得出,当E为0的时候,相当于X+127 = 0,那么X就为-127即2^-127所以这个数非常非常小且接近0。此时尾数(M)不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字。
2):E全为1。同理上,如果有效数字M全为0,表示±无穷大(正负取决于符号位s);如果有效数字M不全为0,表示这个数不是一个数(NaN)。一些运算的结果不能是实数或者无穷,就会返回NaN值,比如正无穷减正无穷,-1的根号值。在某些应用中表示未初始化的值,也很有用处。这一点在Javascript当中有一个函数isNaN()与这个NaN的含义有点类似,它的作用是用来判断一个参数或者表达式是否是一个数字。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值