1

编译器如何为以下两个生成代码有什么不同。其次,它们会产生相同的返回值吗?

  static inline float fix2float(int64_t f)
  {
    return (float)f / ((int64_t)1 << 60); 
  }

和这个

  static inline float fix2float(int64_t f)
  {
    return (float)(f / ((int64_t)1 << 60)); 
  }
4

2 回答 2

8

这两个函数非常不同:第二个执行整数除法,而第一个执行浮点。

特别是,第二个版本的返回值总是在 [-8, 7] 范围内的整数。

更新:当然,只有当您首先更正unwind 捕获的错字时,这才是正确的。

于 2013-04-18T14:15:15.763 回答
5

是的,有:在 C 中,类型转换的优先级高于除法,因此第一个将除以float,而第二个将执行整数除法。

于 2013-04-18T14:15:43.423 回答