0

如何将 int 转换为浮点数(以无符号返回,但解释为浮点数)?我不能使用任何高级语言结构,如联合、仅按位运算、控制逻辑(if/while)、+ 和 - 等。

4

2 回答 2

5

当然。您当然可以从原始字节缓冲区构造一个浮点数。单精度floats 在 IEEE-754 中表示为 32 位值,可以很容易地表示整数空间。IEEE 浮点的维基百科条目描述了各种格式。您所要做的就是弄清楚要设置或测试哪些位。查看关于单精度的维基百科页面以获得对位的详细描述。这是一个开始:

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;
}

我留下了很多想象力,但我有一种感觉,这是一个家庭作业问题。一旦你理解了我写的部分,剩下的应该很容易完成。一个更好的解决方案是使用 a union,但我也将把它作为练习留给读者

于 2012-09-10T01:52:44.067 回答
-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

这意味着它被转换为浮点数。:-)

于 2012-09-10T11:19:37.413 回答