浮点数的二进制表示

单精度浮点数float32和双精度浮点数float64的二进制表示方法相似,以float64为例,二进制位如图

 

sign bit(符号): 用来表示正负号,0代表数值为正,1代表数值为负。

exponent(指数): 用来表示次方数

mantissa(尾数): 用来表示精确度

 

一个双精度浮点数所代表的数值为:(-1)sign × 2exponent - 0x3ff × 1.mantissa

0 ≤ exponent ≤ 0x7ff,- 0x3ff 称为偏正值,使指数即可正亦可负。

 

为什么不用符号位1bit + 数值位10bit表示形式呢?

答:为了简化比较。因为,指数的值可能为正也可能为负,如果采用补码表示的话,全体符号位S和Exp自身的符号位将导致不能简单的进行大小比较。正因为如此,指数部分通常采用一个无符号的正数值存储

 

signexponentmantissa数值
0000 0000 00000000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00000.0
1000 0000 00000000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000-0.0
0000 0000 0000不为0下溢数
0111 1111 11110000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000无穷大
0111 1111 1111不为0NaN
0011 1111 11111000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00001.5

 

 

 

 

 

 

注:

  • float类型可以表示正零值和负零值
  • mantissa从左到右第N位表示2-N,例如1.5的二进制表示。

int64与相等float64的二进制关联

二进制数值

0000 0000 0000 0000 0000 0000 0000 0000

0000 0000 0000 0000 0000 0010 0010 1011

555

0100 0000 1000 0001 0101 1000 0000 0000

0000 0000 0000 0000 0000 0000 0000 0000

555.0

int64最高非零位以后的二进制位 === float64 mantissa,所以float64可以不损失精度表示的最大int64范围是-253 ~ 253,253+1就没法表示了。然而,诸如253+2一类的int64仍然可以不损失精度地用float64表示。

 

 

转载于:https://www.cnblogs.com/zhucq/p/10704428.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值