以float为例了解浮点数


flaot浮点数二进制表达由三个部分组成:

sign(1bit):表示浮点数是正数还是负数,0表示正数,1表示负数

exponent(8bit):指数部分。类似科学计数法中M*10^N中的N,只不过这里是以2为底数,需要注意的是,这部分是要以2^7-1即127做偏移调整的,即指数实际值等于2^E-127

mantissa(23bits):基数部分。浮点数具体数值的实际表示

举个例子:以5.5为例

①5.5用二进制表示为101.1

②将其规格化(Normalize),原理就是保证小数点前只有一个bit。等到如下表达式:1.011*2^2

③填充到各部分

sign:正数所以为0

扫描二维码关注公众号,回复: 394668 查看本文章

exponent:需要做偏移调整所以它的值应该是127+2= 129

mantissa:需要特别解释一下,因为规格化后整数部分总是为1,所以将1省去,则mantissa为011

最后得到float表示的5.5在计算机中存储的是 0 1000 0001 0110 0000 。。(后面0省略)

 
exponent都为0或都为1时,有非规格数、无穷大、无穷小、NaN等几种情况,不介绍

float取值范围和精度

取值范围大致取决于exponent,精度取决于mantissa,2^23等于8388608所以精度为7位能完全保证6位
 

猜你喜欢

转载自xiaoxiaoher.iteye.com/blog/2374617