【问题标题】:assign a hex value to float returns a wrong value [duplicate]将十六进制值分配给浮点数返回错误值[重复]
【发布时间】:2014-06-05 17:41:33
【问题描述】:

我是 C 新手,我尝试了以下操作:

float f = 0x41933333;

这应该给我浮点数:18.4 但是当我查看内存时,我发现了十六进制值:

66 26 83 4e

浮点数:41933333.0000

为什么我的十六进制值被解释为十进制数?

【问题讨论】:

  • 你确定你引用的数字是你的结果吗?因为float f = 0x41933333; 应该给1.10016589e+09for f

标签: c hex


【解决方案1】:

0x41933333 是一个整数常量。当分配给float 时,整数被转换。如果您需要一个十六进制浮点常量,则必须明确使用该符号:

0x0.933333P4

或类似的东西——我只是随便猜测了正确的值是多少,但0x 前缀和P 指数是十六进制浮点常量的关键部分。有关完整详细信息,请参阅 ISO/IEC 9899:2011 中的第 6.4.4.2 节浮动常量。

【讨论】:

    【解决方案2】:

    如果要直接插入原始值,请使用联合。

    【讨论】:

      【解决方案3】:

      或者,您可以通过将 int 的值解释为 float 来执行强制转换

      unsigned int n = 0x41933333;
      float f = *((float*)&n);
      

      【讨论】:

      • 谢谢,这对我有用:)
      • 这仅适用于int 的大小与float 的大小相同的情况。
      • 此方法违反了 C 的别名规则 (C 2018 6.5 7),并且是不必要的,因为可以使用 memcpy(在 C 或 C++ 中)或一个联合(在 C 中)。
      猜你喜欢
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 2014-10-31
      • 2014-03-01
      • 1970-01-01
      • 2016-03-29
      相关资源
      最近更新 更多