int与float在内存中的存储形式_对比与转换

本文探讨了int和float在内存中的存储形式,包括int的补码表示和float的SEEE EEEEE EMMM MMMM形式,并通过具体例子解析了如何进行二进制转换,以及union在验证转换过程中的作用。同时提到了double类型,虽然存储结构类似,但字段长度不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看faac代码中看到int与float的联合体,看不懂代码,于是对这两种数据类型的存储方式做了一番了解

typedef union {
    float f;
    int i;
} fi_union;

//faac    aacquant.c   285行



int:

长度 4字节

以补码形式存数数据,首位为符号位,数据的二进制原码,经过反码(符号位不变),再加1得到数据的补码进行存储

还原时可减1,再对非符号位进行反码,记得到原码,转换为十进制即可


float:

长度 4字节

SEEE EEEE    EMMM MMMM    MMMM MMMM    MMMM MMMM     

     S: 表示浮点数正负,1为负数,0为正数
     E: 指数加上127后的值的二进制数(还原时将该数减127,得到指数的二进制)
     M: 底数,表示小数点后的二进制,隐含了个位上的1,即还原时,底数为1.MMMMM...
注意:这里有个特例,浮点数 为0时,指数和底数都为0,但此前的公式不成立。因为2的0次方为1,所以,0是个特例。当然,这个特例也不用认为去干扰,编译器会自动去识别。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值