float类型数据详解

float类型

在内存中的表示

s | eeeeeeee | mmm mmmm mmmm mmmm mmmm mmmm
  • float类型在计算机中用4个字节存储,32位的各部分划分如下
    • 31位(符号位):符号,0为正,1为负
    • 23-30位(指数位):用八位存储指数部分
      • 是指数部分e+127的二进制表示(指数位本应该可以表示正负指数的,但没有符号位,因此,指数位部分通过加上偏差值127来表示正负)
      • 计算方法(不断除2至整数位是1)
    • 0-22位(尾数位):存储小数部分
      • 2^(-1) + 2^(-2) + 2^(-3) + …
      • 计算方法(除以指数后的值-1,然后分解为上述2的负指数相加)
      • 由于m总是大于1小于2的,也就是m写成1.xxxxxxx的形式,其中xxxxxxx表示小数部分。所以计算机在保存时总是默认把1去掉
      • 由于2^(23+1) 等于 16777216,10^7 < 16777216 < 10^8,所以单精度浮点型的有效位数是七位
(−1 )^s × (1+m )× 2^e
  • 例1 :-6.625
    • bit31: 首位应该是1
    • bit23-30: 6.625/(2^2) = 1.65625,所以指数为2+127=129,二进制表示“1000 0001”
    • bit0-22: m = (1.65625-1) = 0.65625 = 2^(-1) + 2^(-3) + 2^(-5),二进制表示"101 0100 0000 0000 0000 0000"
    • 所以最终的结果二进制表示为“1100 0000 1101 0100 0000 0000 0000 0000”,十进制表示为“ 3235119104”
  • 例1 : 2.34E+22f
    • 二进制表示为“0110 0100 1001 1110 1001 0000 1000 1000”
    • 符号位为0,该浮点数为正数
    • 指数位为“1100 1001”,十进制表示201,201-127 = 74
    • 尾数位“001 1110 1001 0000 1000 1000”,2^(-3) + 2^(-4) + 2^(-5 )+ 2^(-6) + 2^(-8 )+ 2^(-11) + 2^(-16 )+ 2^(-20)约等于0.238785743713379
    • 最终结果为(1+0.238785743713379)*2^74 = 2.34E+22f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值