gpt4 book ai didi

c - 将整数向下舍入到最接近的 4 倍数的标准方法

转载 作者:太空宇宙 更新时间:2023-11-04 00:48:50 25 4
gpt4 key购买 nike

我想将整数 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com