十进制与32位iee754浮点格式相互转化函数

上传人:第*** 文档编号:33582596 上传时间:2018-02-15 格式:DOCX 页数:4 大小:13.21KB
返回 下载 相关 举报
十进制与32位iee754浮点格式相互转化函数_第1页
第1页 / 共4页
十进制与32位iee754浮点格式相互转化函数_第2页
第2页 / 共4页
十进制与32位iee754浮点格式相互转化函数_第3页
第3页 / 共4页
十进制与32位iee754浮点格式相互转化函数_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《十进制与32位iee754浮点格式相互转化函数》由会员分享,可在线阅读,更多相关《十进制与32位iee754浮点格式相互转化函数(4页珍藏版)》请在金锄头文库上搜索。

1、1 32 位 IEE754 浮点格式对于大小为 32-bit 的浮点数(32-bit 为单精度,64-bit 浮点数为双精度,80-bit 为扩展精度浮点数) ,1、其第 31 bit 为符号位,为 0 则表示正数,反之为复数,其读数值用 s 表示;2、第 3023 bit 为幂数,其读数值用 e 表示;3、第 220 bit 共 23 bit 作为系数,视为二进制纯小数,假定该小数的十进制值为 x;十进制转浮点数的计算方法:则按照规定,十进制的值用浮点数表示为:如果十进制为正,则 s = 0,否则 s = 1;将十进制数表示成二进制,然后将小数点向左移动,直到这个数变为 1.x 的形式即尾数

2、,移动的个数即为指数。为了保证指数为正,将移动的个数都加上 127,由于尾数的整数位始终为 1,故舍去不做记忆。对 3.141592654 来说,1、正数,s = 0;2、 3.141592654 的二进制形式为正数部分计算方法是除以二取整,即得 11,小数部分的计算方法是乘以二取其整数,得 0.0010 0100 0011 1111 0110 1010 1000,那么它的二进制数表示为 11.0010 0100 0011 1111 0110 1010 1;3、将小数点向左移一位,那么它就变为 1.1001 0010 0001 1111 1011 0101 01,所以指数为1+127=128,

3、e = 128 = 1000 0000;4、舍掉尾数的整数部分 1,尾数写成 0.1001 0010 0001 1111 1011 0101 01,x = 921FB65、最后它的浮点是表示为 0 1000 0000 1001 0010 0001 1111 1011 0101 = 40490FDA/-/ 十进制转换为 32 位 IEE754 浮点格式/-void ConvertDexToIEE754(float fpointer,ModRegisterTpyedef *SpModRegister)double integer,decimal;unsigned long bininteger,b

4、indecimal;Uint8 _power,i;decimal = modf(fpointer,if(decimal | integer)bindecimal = decimal * 0x800000; /223while(bindecimal & 0xff800000) 0)bindecimal = 1;if(integer 0)bininteger = integer;for(i=0;i= 0x1;bininteger = integer;bininteger /去掉最高位的 1if(_power = 23) /如果幂指数23 则舍弃小数位部分bininteger = (_power-2

5、3);bindecimal = 127+_power;bininteger |= bindecimal = _power;bininteger |= bindecimal;bindecimal = 127+_power;bininteger |= bindecimal 1)_power+;bindecimal = 9;bininteger = bindecimal;bindecimal = 127-_power;bininteger |= bindecimal RegBytei+ = (bininteger 24) SpModRegister-RegBytei+ = (bininteger 1

6、6) SpModRegister-RegBytei+ = (bininteger 8 ) 浮点数转十进制的计算方法:则按照规定,浮点数的值用十进制表示为: (-1)s * (1 + x) * 2(e 127)对于 49E48E68 来说,1、其第 31 bit 为 0,即 s = 02、第 3023 bit 依次为 100 1001 1,读成十进制就是 147,即 e = 147。3、第 220 bit 依次为 110 0100 1000 1110 0110 1000,也就是二进制的纯小数 0.110 0100 1000 1110 0110 1000,其十进制形式为(0.110 0100 10

7、00 1110 0110 1000 * 223) / (223) = (0x49E48E68 & 0x007FFFFF) / (223) = (0x648E68) / (223) = 0.78559589385986328125,即 x = 0.78559589385986328125。这样,该浮点数的十进制表示=(-1)s * (1 + x) * 2(e 127)=(-1)0 * (1+ 0.78559589385986328125) * 2(147-127)= 1872333*/-/ 32 位 IEE754 浮点格式转换为十进制/-float ConvertIEE754ToDex(ModR

8、egisterTpyedef *SpModRegister)double x,fpointer;unsigned long bininteger,bintmp;Uint8 _power,i=0,s;/*该浮点数的十进制表示=(-1)s * (1 + x) * 2(e 127)=(-1)0 * (1+ 0.78559589385986328125) * 2(147-127)= 1872333*/bintmp = SpModRegister-RegBytei+ RegBytei+;bininteger = SpModRegister-RegBytei+ RegBytei+;bininteger |= bintmp 23;_power = bintmp bintmp = bininteger s = (bintmp) ? 1 : 0 ;bintmp = pow(2, abs(_power-127) ;if(_power = 127)fpointer = (1+x) * bintmp ; elsefpointer = (1+x) / bintmp ; bintmp = (fpointer * 10000 + 5)/10;fpointer = (double)bintmp / 1000;if(s) fpointer *= -1;return (fpointer);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号