我想将整数 i
舍入到最接近的 4 的倍数。
例如:
0 -> 0
1 -> 0
2 -> 0
3 -> 0
4 -> 4
5 -> 4
6 -> 4
7 -> 4
8 -> 8
9 -> 8
我这样做的明显方法是:
i = (i / 4) * 4;
但我因为使用这个而受到批评,因为据说它不清楚,而且看起来像一个错误。
我知道明显的替代方案,按位移动:
i = (i >> 2) << 2;
但我随后意识到存在完全不同的方法:
(i | 3) - 3
示例程序:
#include <stdio.h>
int main(void) {
int i;
for(i = 0; i < 4*4; i++) {
printf("%d %d %d %d\n", i, (i / 4) * 4, (i >> 2) << 2, (i | 3) - 3);
}
return 0;
}
我想知道执行此操作的标准方法,以及具有最高优化的现代编译器是否足够智能,可以将我的代码转换为最快的方法。
最佳答案
这是一个见仁见智的问题。我的意见是:
i = (i / 4) * 4;
是最好的方法。这很简单,而且显然给出了正确答案。您编写的任何其他代码,阅读它的人都必须停下来思考它在做什么,以及它是否可能有任何不起作用的极端情况。
可能出现的一个问题是当i
为负数时该怎么办。 C 使用“向零截断”,因此如果 i
为负数,则此表达式给出对 abs(i)
执行此操作的负数。
一个等效的方法是:
i -= (i % 4);
也简单明了。
关于c - 将整数向下舍入到最接近的 4 倍数的标准方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27115595/