这两个实现之间有区别吗?

时间:2013-04-18 14:13:03

标签: c gcc

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

  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)); 
  }

2 个答案:

答案 0 :(得分:8)

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

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

更新:当然,只有在您第一次更正the typo that unwind caught时才会这样。

答案 1 :(得分:5)

是的,有:在C中,typecast has higher precedence than division,所以第一个将分为float,而第二个将执行整数除法。