编译器如何为以下两个代码生成代码有什么不同。其次,他们会产生相同的回报值。
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));
}
答案 0 :(得分:8)
这两个函数非常不同:第二个函数执行整数除法,而第一个函数执行浮点运算。
特别是,第二个版本的返回值始终是[-8,7]范围内的整数。
更新:当然,只有在您第一次更正the typo that unwind caught时才会这样。
答案 1 :(得分:5)
是的,有:在C中,typecast has higher precedence than division,所以第一个将分为float
,而第二个将执行整数除法。