浮点型存储

先说怎么把浮点型转换成二进制进行存储吧

举例:

123.25

123二进制表示为: 0111 1011,具体的计算过程就是除2求余

0.25表示为:01  ,具体计算过程就是乘以2取整数

0.25*2=0.5    0.5*2=1

所以123.45的二级制表示为:0111 1011.01

接着说二进制的存储格式吧:

float类型也会转换成科学计数表达方式   value=a*2^n  其中a>=1 , a<2; a叫尾数,n叫指数。

针对float类型,占4个字节,bit[0]为正负号位,bit[1-8]为指数部分,bit[9-31]为尾数部分。


那么根据以上规则以及计算结果,123.25的二进制表示应该是:

bit[0]  

bit[1-8]  0000 0110

123.25的二级制表示0111 1011.01转换成科学计数法应该为1.11 101101*2^6,指数为6

bit[9-31] 1110 1101 0000 0000 0000 000

123.25的二级制表示0111 1011.01转换成科学计数法应该为1.11 101101*2^6,由于小数点前的1位固定1,所以可以去掉,只保留小数点后面的。

int main()
{

typedef struct _FP_SIGLE{
        unsigned int nMantissa : 23;  //尾数部分
        unsigned int nExponent :  8;  //指数部分
        unsigned int nSign     :  1;  //符号位
    } FP_SINGLE;
    float a = 123.25;
    printf("a is %f\n",a);
    FP_SINGLE* p = (FP_SINGLE*)&a;
    printf("%d, %#X, %#X\n", p->nSign, p->nExponent-127, p->nMantissa);
    return 0;

}

运行结果:

a is 123.250000
0, 0X6, 0X768000


参考链接:http://blog.csdn.net/czg13548930186/article/details/72808396

还请各位在评论区贴下官方文档对于float的权威解释链接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值