IEEE754数据结构
32位单精度浮点数的数据格式如下:
符号位(S) | 指数位(M) | 小数位(M) |
---|---|---|
31 bit | 30~23 bit | 22~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