当前访客身份:游客 [ 登录 | 加入开源中国 ]

代码分享

当前位置:
代码分享 » C/C++  » 编程基础
寒酸人

將整型转换为浮点数

寒酸人 发布于 2013年03月07日 9时, 2评/1055阅
对于函数i,这个函数计算(float)i的位级表示。
  测试你的函数对参数f可以取的所有2^32个值求值,将结果与你使用机器的浮点运算得到的结果相比较。
 写码规则:禁用: float类型,任何联合,结构和数组,任何浮点数据类型,运算或者常数
                  可用:typedef unsigned float_bits
                  取而代之:你的代码应该执行实现这些指定的浮点运算的为操作,就是用unsigned 类型模拟float去运算浮点数的转换,将一个int类型转换为浮点数,并不是简单的(float)int_value,而是用unsigned模拟float的位,用unsigned实现一个int数转换为float时的位级表示。


标签: <无>

代码片段(1) [全屏查看所有代码]

1. [代码][C/C++]代码     跳至 [1] [全屏预览]

#include <stdio.h>

#include <stdlib.h>

typedef unsigned float_bits;

float_bits float_i2f(int i);

int main()

{

    int i;

        printf("please input a digit:");

   while(scanf("%d",&i)==1)

    {

      printf("%x\n",float_i2f(i));

      printf("please a digit:");

    }

 

    return0;

}

float_bits float_i2f(int i)

{

   unsigned sign=0;

   unsigned exp=0;

   if(i<0)

    {

       i=-i;

       sign=1;

    }

   unsigned frac=i;

   i=i|(i>>1);

   i=i|(i>>2);

   i=i|(i>>4);

   i=i|(i>>8);

   i=i|(i>>16);

   i=i^(i>>1);

   frac=(frac-i);

   while(i>>=1)

    exp++;

   frac=(frac<<(23-exp)) & 0xFFFFFFFF;

   exp+=127;

   sign=sign & 1;

    exp=exp& 0xFF;

   printf("exp=%d\t frac=%d\t i=%d\t",exp,frac,i);//仅作观察

    return(sign<<31)|(exp<<23)|frac;

}


开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(2)

  • 1楼:zhcosin 发表于 2013-03-09 10:35 回复此评论
    建议楼主花点时间把前面那段说明文字重新写一下,我看了明天没明白是什么意思,有时候你想出一个好的主意并不值得兴奋,值得兴奋的是你能把你的好主意分享给别人。
  • 2楼:寒酸人 发表于 2013-03-13 18:25 回复此评论
    简单一点说把,就是将unsigned int digit=5这个整型数转换为float(digit),但是我的代码是模拟digit转换成float类型时在内存中的存储方式。
开源从代码分享开始 分享代码
寒酸人的其他代码 全部(2)...