浮点数据与IEE754
在计算机系统(包括单片机)中,浮点数(单精度float和双精度的double)对采用IEE-754标准。该标准为 32 位浮点和 64 位双精度浮点二进制小数定义了二进制标准。
IEEE 754 用科学记数法以底数为 2 的小数来表示浮点数。IEEE 浮点数用 1 位表示数字的符号(1为负0为正),用 8 位来表示指数,用23 位来表示尾数,即小数部分。作为有符号整数的指数可以有正负之分。小数部分用二进制(底数 2)小数来表示,这意味着最高位对应着值 (2 -1),第二位对应着 (2 -2),依此类推。对于双精度浮点数,用 11 位表示指数,52 位表示尾数。IEEE 浮点值的格式如图 1 所示。
图 1. IEEE 754 浮点数的格式
指数(阶码)是以2为底的指数再加上偏移量127.。尾数的整数部分永远为1,因此不予保存,但它是隐含存在的。一个浮点数计算式为
二:转换方法:可以用工具转换,也可以用C语言的内在机制转换
2.1用工具转换:IEEE754转换程序(ieee754转换器)V2.0 绿色版 http://www.greenxf.com/soft/47195.html
2.2用C语言转换:对于小端模式:
typedef union
{
float f;
unsigned char arry[4];
}Float_IEE754Conv_Typedef;
float dat;
Float_IEE754Conv_Typedef ConvDat;
串口通讯中接收中
for(u8 i=0;i<4;i++)
ConvDat.arry[i]=接收寄存器;
dat=ConvDat.f;
串口发送中:
ConvDat.f=dat;
for(u8 i=0;i<4;i++)
发送寄存器=ConvDat.arry[i];
十进制转IEE754类型:
unsigned int dat_w;
ConvDat.f=123.4;
for(u8 i=0;i<4;i++)
dat_w |=ConvDat.arry[i]<<(i*8);
IEE754类型转十进制:
unsigned int dat_w;
ConvDat.f;
for(u8 i=0;i<4;i++)
ConvDat.arry[i]=(u8)(dat_w>>(i*8));
return ConvDat.f
引申参考阅读: