我对 GCC 的 % 运算符进行了一些研究,如果它有负股息,它似乎无法计算正确的值。好吧,我知道GCC的所有相关规则。
无论如何,-3%5 是
- -3 由 GCC 和
- 2 由数学
我现在使用这个宏来纠正这种行为:
#define mod(M, N) (M>=0 ? M%N : (N-abs(M%N))%N)
#define mod2(M, N) (M%N>=0 ? M%N : M%N + N)
它们都产生正确的价值,但看起来丑陋且无效。你能推荐任何更好(更快)的方法来做这个计算吗?
谢谢。