*((int *)&f)在C中做什么?

Pah*_*asa 3 c floating-point binary

我通过以下答案找到了一种在c中将浮点数转换为二进制的方法:在C中将float转换为二进制数,但是我不确定答案中使用的代码*((int*)&f)实际上是如何转换数字的。它到底是做什么的?

R..*_*R.. 7

它调用未定义的行为,这意味着如果程序可以访问,则该程序无效。

某人打算这样做是将a的位重新解释floatint,假设int是32位,并且可能也是floatIEEE单。

有两种正确的方法(int用替换uint32_t为删除第一个无用的假设):

  1. (union { float f; uint32_t i; }){f}.i
  2. uint32_t i; memcpy(&i,&f,sizeof i);