当前位置: 代码迷 >> 数据结构与算法 >> float类型数据的存放有关问题
  详细解决方案

float类型数据的存放有关问题

热度:515   发布时间:2016-05-23 09:14:09.0
float类型数据的存放问题
目前已知的所有的C/C++编译器都是按照IEEE制定的IEEE   浮点数表示法来进行运算的。这种结构是一种科学表示法,用符号(正或负)、指数和尾数来表示,底数被确定为2,也就是说是把一个浮点数表示为尾数乘以2的指数次方再加上符号。下面来看一下具体的float的规格:

float
共计32位,折合4字节
由最高到最低位分别是第31、30、29、……、0位
31位是符号位,1表示该数为负,0反之。
30-23位,一共8位是指数位。
22-0位,一共23位是尾数位。
每8位分为一组,分成4组,分别是A组、B组、C组、D组。
每一组是一个字节,在内存中逆序存储,即:DCBA


我现在要办的就是知道FLOAT数为40.00,要求出对应ieee浮点数字符串表示(42200000)
自己做应该怎么来实现?或者有没有实现这个功能函数?


------解决方案--------------------
float f = 40.0f;
char *p = (char *)f;
然后利用 p 逐字节操作 f
------解决方案--------------------
这个问题的常规解决思路是用数字符串运算的思路,
(提示:先认真研究IEEE754: http://steve.hollasch.net/cgindex/coding/ieeefloat.html)
  首先,将float型数分整数、小数据部分分别转成二进制数; 
  然后,将转化后的二进制数再转换成二进制字符串;
  接下来,根据二进制移位运算的规则(右移一位表除2、左移一位表乘2),对该二进制串进行移位(如果float数小于1则左移),直至整数位只有唯一的1,同时记录下移位的次数(此即阶码左移阶码为负,右移为正);
  之后,将所得的阶符、阶码、尾符、尾码等逐一对号拼接起来,得到的就是IEEE754标准的float型二进制字符串;
  最后,将此二进制字符串化成十进制数字符串,并输出。

关键的算法:数转字符串,不同进制数字符串的互化,这些网上可以找些相关CODE看看,或有现成的算法。

其它可参考网站:http://babbage.cs.qc.edu/IEEE-754/32bit.html
------解决方案--------------------
阶码的符号是由Bias来确定,32位的Bias为127。如果右移N位,则阶码为Bias-N,如果左移N位,则阶码为Bias+N。
  这里的127也要用二进制数字串形式(1111111)进行运算。
  相关解决方案
本站暂不开放注册!
内测阶段只得通过邀请码进行注册!
 
  • 最近登录:Thu Nov 23 09:58:37 CST 2017
  • 最近登录:Thu Nov 23 09:58:37 CST 2017
  • 最近登录:Thu Nov 23 09:58:37 CST 2017
  • 最近登录:Thu Nov 23 09:58:37 CST 2017
  • 最近登录:Thu Nov 23 09:58:37 CST 2017