浮点数据与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

 

转载于:https://www.cnblogs.com/jieruishu/p/6565177.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值