加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]浮点数与IEEE-754标准格式互换方法

(2015-06-15 13:31:51)
标签:

转载

分类: qt

浮点数在存储时,是存储连续的字节中的,
只要设法找到存储位置,就可以得到这些数了。
可以定义一个void的指针,将此指针指向需要存储
的浮点数,然后将此指针强制转化为char型,
利用指针就可以得到组成该浮点数的各个字节的值了。
#define uchar unsigned char
#define uint unsigned int
void FtoC(void)
{ float a;
uchar i,*px
uchar x[4]; //定义字符数组,准备存储浮点数的四个字节
void *pf;
px=x; //px指针指向数组x
pf=&a; //void 型指针指向浮点数首地址
a=34.526;
for(i=0;i<4;i++)
{ *(px+i)=*((char *)pf+i); //强制void 型指针转成char型,因为
                            //void型指针不能运算
}

如果已将数存入EEPROM,要将其取出合并,方法也是一样,
#define uchar unsigned char
#define uint unsigned int
void CtoF(void)
{ float a;
uchar i,*px
uchar x[4]={56,180,150,73};
void *pf;
px=x;
pf=&a;
for(i=0;i<4;i++)
{
*((char *)pf+i)=*(px+i);
}
}


//34.526存为(160,26,10,66)

IEEE-754标准的格式:

一个浮点数用两个部分表示,尾数和2的幂,尾数代表浮点上的实际二进制数,2的幂代表指

数,指数的保存形式是一个0到255的8位值,指数的实际值是保存值(0到255)减去127,一个

范围在-127到+128之间的值,尾数是一个24位值(代表大约7个十进制数),最高位MSB通常

是1,因此省略不保存,一个符号位表示浮点数是正或负。

地址        eb      BY0       BY1      BY2
内容    SEEEEEEE E.MMMMMMM MMMMMMMM MMMMMMMM

S (第31位)代表符号(数符)位1是负,0是正;
E 偏移127的幂,二进制阶码=(EEEEEEEE)-127;
. 小数点;
M 24位的尾数保存在23位中,只存储23位,隐含最高位1。此方法用最较少的位数实现了较

高的有效位数,提高了精度。
零是一个特定值,幂是0 尾数也是0。

IEEE754标准的一个规格化 32位浮点数x的真值可表示为
x=(-1)^S*(1.M)*2^(E-127) e=E-127
31   30                   23                       0
|S |                |               
[例1]若浮点数x的754标准存储格式为(41360000)16,求其浮点数的十进制数值。
解:将16进制展开后,可得二进制数格式为
    100,0001,0       011,0110,0000,0000,0000,0000
                                                      M
指数e=100,0001,0-01111111=00000011=(3)10
包含隐藏位1的尾数1.M=1.011,0110,0000,0000,0000,0000
于是有 x=(-1)^0*(1.M)*2^(E-127)
                =+(1.011011)2*2^3
       =(11.375)10

[例2]将数(20.59375)10转化为754标准的32位浮点数的二进制存储格式。
解:首先分别将整数部分和小数部分转换成二进制
(20.59375)10=+(10100.10011)2
然后移动小数点使其在1,2位之间
10100.10011=1.010010011*2^4 e=4

于是得到:S=0,E=e+127=131,M=010010011

最后得到32位浮点数的二进制存储格式为

0 100,0001,1 010,0100,1100,0000,0000,0000

=(41A4C000)16

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有