浮点数在内存中的格式(理解浮点到定点的转化)

前言:在skia中经常会碰到SkFixedToFloat或者相反的操作,将单精度浮点数转成定点数很简单,直接乘个 65536 再强制一 下类型就行了,这也就是 Float2Fixed 所做的。忘了在哪里看到的据说是skia这么做是速度问题。


对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用 64bit,我们在声明一个变量float f = 2.25f的时候,是如何分配内存的呢?其实不论是float类型还是double类型,在计算机内存中的存储方式都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。


无论是单精度还是双精度,在内存存储中都分为3个部分: 
1) 符号位(Sign):0代表正,1代表为负;
 
2) 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储

3) 尾数部分(Mantissa):尾数部分;

    其中float的存储方式如下图所示:

    float类型的存储方式

    而双精度的存储方式为:

    double类型数据的存储方式

    R32.24和R64.53的存储方式都是用科学计数法来存储数据的,比如8.25用十进制的科学计数法表示就为:8.25*clip_image0021,而120.5可以表示为:1.205*

    • 0
      点赞
    • 2
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

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

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

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值