电子大神的日记本,供应链专家的功夫茶盘,在这里记录、分享与共鸣。

登录以开始

浮点数

浮点数使用4个顺序字节来存储其存储的规则如下:
address+0 address+1 address_2 address_3
SEEE_EEEE EMMM_MMMM MMMM_MMMM MMMM_MMMM
其中:
S为符号位;
E为乘数幂对应127的偏差值;(这样可以产生负幂,大于127小数点向右移动,小于127小数点向左移动)
M为24位的尾数;

浮点数转换为数组时按如下规则计算:
1 符号位S根据正数为0,负数为1取值;
2 浮点数的整数部分先转换成二进制序列A;
3 浮点数的小数部分页转换成二进制序列B;
4 将二进制系列B加在序列A的后边构成一个大序列C,位数合计16位(其余部分作为转换误差舍弃);
5 将小数点左移到最高位后面,移动几位就记几,记做e;
6 将e+127得到一个数,其二进制序列就是乘数幂E;
7 序列C最高位后的23位二进制序列就是M;
8 这样得到的S,E,M就是数组记录的值;

现在以-13.8为例进行转换
1、值为负,则符号位为1;
2、数为13.8其二进制序列为1101.110011001....
3、要转换为1.1011100110011...小数点需要向左移动3位,因此幂数E=127+3 = 130=10000010;
4、于是数组值为11000001 01011100 11001100 11001100;

 

数组转换为二进制数时:
1 将E-127,得到的数为小数点右移的位数n;
2 将M前补1后将小数点右移n位;
3 小数点前的数据为整数部分的二进制数,小数点后的数据后为小数部分的二进制。
4 S位标记浮点数的正负;
5 以上就得到了浮点数的符号,整数部分,小数部分。
现在以C1480000为例进行转换:
1、幂数E = 10000010 = 130,130-127 = 3,因此幂为3;
2、尾数M = 1001000 00000000 00000000 将前面补1后为1.1001(二进制序列),小数点右移3位得到1100.1(二进制序列),于是1*2(3)

+1*2(2)+0*2(1)+0*2(0) = 12,1*2(-1)+0*2(-2)...=0.5,则结果为12.5。
3、符号标记为1,数为负数,因此最终结果为-12.5.

博主
daniel0690@sina.com
adai2007's Blog
adai2007
点击跳转