将int转换为C中的float(无转换)

时间:2012-09-10 01:29:20

标签: c floating-point int bitwise-operators

如何将int转换为float(以无符号形式返回,但解释为float)?我不能使用任何高级语言结构,如联合,只有按位操作,控制逻辑(if / while),+和 - 等。

2 个答案:

答案 0 :(得分:5)

不确定。您当然可以从原始字节缓冲区构造浮点数。单精度float在IEEE-754中表示为32位值,可以非常容易地表示整数空间。 wikipedia entry on IEEE floating point描述了各种格式。您需要做的就是找出要设置或测试的位。查看wikipedia page on single-precision以获得有关位的详细描述。这是一个开始:

float convert_int(unsigned int num) {
    float result;
    unsigned int sign_bit = (num & 0x80000000);
    unsigned int exponent = (num & 0x7F800000) >> 23;
    unsigned int mantissa = (num & /* insert mask value here */);

    /* you can take over from here */

    return result;
}

我留下了很多想象力,但我觉得这是一个家庭作业问题。一旦你理解了我写的部分,就应该很容易做其余部分。一个更好的解决方案是使用union,但我会将其作为练习留给读者

答案 1 :(得分:-3)

如果您不想使用任何算术或按位运算符,那么您可以使用方法

 float convrt(int x)
 {
  return x;
 }

它将返回浮动...你可以在main中验证它..

  void main()
 {
   int x=5;
   cout<<"size of x=" << sizeof(x);
   cout<<"size of convrt(x)=" << sizeof(convrt(x));
 }

它将输出为

    size of x=2
    size of convrt(x)=4

这意味着它被转换为float。 : - )