一个定点小数除法如下:
#define FD_DIV(X, Y) (((fp_t)X)<<FD_SHIFT_AMOUNT/(Y))
然而这是错的……
错在哪里呢…左移 << 的优先级是低于除法 / 的…
所以会先计算FD_SHIFT_AMOUNT/(Y)
#define FD_DIV(X, Y) ((((fp_t)X)<<FD_SHIFT_AMOUNT)/(Y))
加上括号就好了…对括号哲学的理解还是不够
本文探讨了定点小数除法的一种实现方式,并指出了一种常见的优先级错误。通过对比正确的表达式与错误的表达式,说明了在进行位移操作时如何正确使用括号以确保运算符的优先级正确。
一个定点小数除法如下:
#define FD_DIV(X, Y) (((fp_t)X)<<FD_SHIFT_AMOUNT/(Y))
然而这是错的……
错在哪里呢…左移 << 的优先级是低于除法 / 的…
所以会先计算FD_SHIFT_AMOUNT/(Y)
#define FD_DIV(X, Y) ((((fp_t)X)<<FD_SHIFT_AMOUNT)/(Y))
加上括号就好了…对括号哲学的理解还是不够
835

被折叠的 条评论
为什么被折叠?