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

将int转换为C中的float(无强制转换),c,floating-point,int,bitwise-operators,C,Floating Point,Int,Bitwise Operators,如何将int转换为float(返回为无符号,但解释为float)?我不能使用任何高级语言构造,如联合、按位运算、控制逻辑(if/while)、+和-,等等。当然。您当然可以从原始字节缓冲区构造浮点数。单精度floats在IEEE-754中表示为32位值,可以非常轻松地表示整数空间。描述了各种格式。您所要做的就是找出要设置或测试的位。请参阅,以获得对位的良好描述。这是一个开始: float convert_int(unsigned int num) { float result;

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

当然。您当然可以从原始字节缓冲区构造浮点数。单精度
float
s在IEEE-754中表示为32位值,可以非常轻松地表示整数空间。描述了各种格式。您所要做的就是找出要设置或测试的位。请参阅,以获得对位的良好描述。这是一个开始:

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

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

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

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

这意味着它将转换为浮点值。:-)

这是家庭作业吗?到目前为止,您尝试了什么?如何访问这个构造的“浮点”值?您可以搜索IEEE浮点格式标准,并找出如何旋转位,将整数设置为“分数”,将适当的值设置为“指数”。@EdS.——尽管meta中的TPTB不赞成“家庭作业”标记。@HotLicks:我所能找到的就是,杰夫在其中为这个特殊的元标记辩护。你有最近的链接吗?我真诚地希望他们不要这样做,因为这清楚地表明,一个人不应该只是交出一个完整的答案。哦,我不知道“TPTB”代表什么:D@pst-是的,我可能应该以友好的方式离开他们(标题:“禁止选角”。这意味着强制转换。他们明确表示想要一个按位解决方案。
    size of x=2
    size of convrt(x)=4