【问题标题】:Convert int to float in C (no casting) [closed]在 C 中将 int 转换为浮点数(无强制转换)[关闭]
【发布时间】:2012-09-10 01:29:20
【问题描述】:

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

【问题讨论】:

  • 这是作业吗?到目前为止,您尝试过什么?
  • 如何访问构造的“float”值?
  • 你在谷歌上搜索了 IEEE 浮点格式标准,并弄清楚如何旋转这些位以将整数设置为“分数”并将适当的值设置为“指数”。
  • @EdS。 -- 虽然元数据中的 TPTB 正在弃用“作业”标签。
  • @HotLicks:我能找到的只有this thread,Jeff 在其中为这个特殊的元标记辩护。你有更新的链接吗?老实说,我希望他们不要这样做,因为它清楚地表明,人们不应该只是交出完整的答案。哦,我不知道“TPTB”代表什么:D

标签: c floating-point int bitwise-operators


【解决方案1】:

当然。您当然可以从原始字节缓冲区构造一个浮点数。单精度floats 在 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,但我也将把它作为练习留给读者

【讨论】:

  • @pst - 是的,我可能应该把它们放在对位友好的地方 =)
【解决方案2】:

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

 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

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

【讨论】:

  • 标题:“无铸造”。 this 隐式转换。他们明确表示他们想要一个按位解决方案。
猜你喜欢
  • 2014-09-03
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 2023-03-10
  • 2022-08-02
相关资源
最近更新 更多