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位