DSP中浮点数的表示方法
先介绍一下IEEE754中浮点数的定义(这里只介绍单精度浮点数):
%A
%A 单精度浮点数由4字节(32位)组成,且分成3段:数符s(0表示正数,1表示负数),阶码e(以2为底数)和尾数x。其中数符1位,占据bit31;阶码8位,占据bit30~bit23;尾数23位,占据bit22~bit0。
%A
%A 浮点数在DSP中的表示:以328.5为例,
%A
%A 首先,确定数符s=0;
%A
%A 其次,将328.5转换成二进制原码表示101001000.1;
%A
%A 再次,将原码101001000.1小数点移位到小数点左边只剩下1位1,即1.010010001,记下所移位数8;阶码占8位,可以表示有符号数,也可表示无符号数,这里采用无符号数,就是将所移位数加上127,转成二进制原码8 +127 = 135 = 10000111b,即e = 10000111;
%A
%A 最后,移位后的原码1.010010001去掉整数部分,只保留小数部分010010001,并在其右边添0,直到满23位,即01001000100000000000000作为尾数。
%A
%A 然后将数符,解码,尾数连起来就是328.5在DSP中的表示了,为0x43A44000。
%A
%A 将十六进制表示的浮点数转换成十进制:
%A
%A 首先,要读出浮点数的数符s,阶码e,尾数x;
%A
%A 其次,按后面的公式计算:(-1)^s * (1 + x) * 2^(e - 127);
%A
%A 再次,将23位尾数转换成十进制纯小数的方法是先将其转换为整数,然后除2^23,即可得到x。
%A
%A 还有下面两个术语:
%A
%A big endian和little endian:对于一个整数2882400086,它的十六进制原码是0x AB CD EF 56。如果采用big endian方式,存储时就是0x AB CD EF 56;如果采用little endian方式,存储时是0x 56 EF CD AB。
%A
%A 在Intel CPU中通常采用little endian方式,而在TI DSP中通常采用big endian方式。
%A
%A
%A%A
%A
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。