IEEE754 32bit转换成浮点数(程序实现)

IEEE754数据结构

32位单精度浮点数的数据格式如下:

符号位(S)指数位(M)小数位(M)
31 bit30~23 bit22~0 bit

转换公式:dis = (-1)e(S) * (1+M) * (2)e(M-127)

程序实现

float IEEE754_to_decimal(uint32_t source)
{
	uint8_t  sign     = 0;
	uint8_t  index    = 0;
	uint32_t mantissa = 0;
	float    decimal  = 0;
	float    result   = 0;
 	
	sign = (uint8_t)((source&0x80000000)>>31);  //符号   第31位
	index = (uint8_t)((source&0x7f800000)>>23); //指数   第23-30位
	mantissa = (source&0x007fffff);             //尾数   第0 -23位
	decimal  = tow_to_ten(mantissa);            //尾数   第0 -23位转换成小数
	
	result = pow(-1,sign)*(1+decimal)*pow(2,(index-127)); //IEE754转换公式
	return result;
}

//转换成小数
float tow_to_ten(uint32_t dat)
{
    float  result = 0.0;
    uint8_t  count = 1;
    uint32_t num  = 0;

    num = (dat<<9)&0xffffffff;
    while(num>0)
    {
			result += ((num&0x80000000)>>31)*pow(0.5,count);
			count++;
			num = num<<1;
			if(count>23)
			{
					break;
			}
    }
	return result;
}

获取更多技术上的交流: https://blog.csdn.net/qq_31227875?spm=1011.2124.3001.5343

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值