Chinaunix首页 | 论坛 | 博客

abc

  • 博客访问: 21775
  • 博文数量: 17
  • 博客积分: 765
  • 博客等级: 军士长
  • 技术积分: 175
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-11 22:34
文章分类

全部博文(17)

文章存档

2010年(3)

2009年(14)

我的朋友
最近访客

分类: C/C++

2009-12-31 19:11:44

#include
int main(int argc, char *argv[])
{
 const float f = -12345678901234567890.789123f;
 
 const int i = *(int *)&f;
 
 bool bF = (i&0x80000000)>>31;
 int iDecCount = ((i&0x7f800000)>>23)-127;
 unsigned long long iAllData = (i&0x7fffff)|0x800000;
 int iDecLen = 23-iDecCount;
 unsigned long long iData = 0;
 if (iDecLen >= 0)
 {
  iData = iAllData >> iDecLen;
 }
 else
 {
  iData = iAllData << -iDecLen;
 }
 unsigned long long iDec = 0;
 // 算小数
 {
  int iMul = iDecLen<13?iDecLen:13;
  unsigned long long iMax = 1;
  for(int i=0; i  {
   iMax *= 10;
  }
  iMax /= 2;
  int iSub = iAllData << (32-iDecLen-1);
  for(int i=0; i  {
   iSub = iSub << 1;
   if (iSub&0x80000000)
   {
    iDec += iMax;
   }
   iMax /= 2;
  }
 }
 printf("%f  解析(指数:%d): %c%llu.%llu\n", f, iDecCount, bF?'-':'+', iData, iDec);
 return 0;
}
阅读(319) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~