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

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

最佳答案

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

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

更新: 当然,这只有在您首先更正 the typo that unwind caught 时才是正确的。 .

关于c - 这两个实现之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16085380/

相关文章:

c++ - 只允许在 C++ 中定义的行为?

c++ - 本地( block )函数 decln 与 defn 返回类型不匹配;在 C++ 中诊断?

c - time(NULL) 和 time(&timer) 有什么区别

c - gethostbyname() 错误 - 与内存管理相关的问题

c - xmlParseMemory 对传递的字符串大小有限制吗

c - Gcc 优化条件

c - 让 gcc 以 "int 0x80"方式编译系统调用?

c++ - const变量什么时候初始化

测试代码生成器优化

c - 如果一个全局变量初始化为0,它会去BSS吗?