位转换浮点到int

时间:2014-07-20 07:41:30

标签: c bit-manipulation

float FastInvSqrt(float x) {
  float xhalf = 0.5f * x;
  int i = *(int*)&x;          // evil bit-level floating-point hacking
  i = 0x5f3759df - (i >> 1);  // what the...?
  x = *(float*)&i;
  x = x*(1.5f-(xhalf*x*x));
  return x;
}

在互联网上有很多地方可以阅读这些内容,但它们都跳过了界限:

int i = *(int*)&x;

有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:2)

这意味着:获取变量x的地址(无论它是什么类型),将该地址强制转换为int指针,然后取消引用该地址从该地址获取int

从技术上讲,我认为它是未定义的行为,但它在许多实现中都能正常工作。基于代码的不可读性,我怀疑作者并不是那么关心:-)他们至少可以记录这个方法,即使只有一个URL。

整数操纵线(你用WTF如此优雅地描述的那个)之后的演员与从int回到float的情况类似。