首页 > 解决方案 > *((int*)&f) 在 C 中做了什么?

问题描述

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

标签: cfloating-pointbinary

解决方案


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

有人打算让它做的是将 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);

推荐阅读