C / C ++中的数学 - 舍入查询

时间:2010-11-30 23:04:47

标签: c++ c math

好的,所以对于一个程序我需要知道两个事实,输入的长度和这个长度最接近的最高数字可以被4整除。 例如。 如果长度为1,我想记录4。 如果长度是3,我想记录4。 如果长度为5,我想记录8。

在数学上我可以将长度除以4,这给出了小数。如果我把它四舍五入,时间到4,它就给了我需要的答案。 那么,我如何让C来整理int的内容呢?我可能会过于复杂,所以请说如果我错过了一些简单的事情。

编辑:我应该补充一下,我已经知道了长度,这是我自己想要的东西。

4 个答案:

答案 0 :(得分:8)

(length+3)/4*4

答案 1 :(得分:4)

利用4是2的幂的事实,过于聪明的回答:

long rounded = length + 3 & -4UL;

答案 2 :(得分:2)

(i + (4 - (i % 4)) % 4)

请参阅http://ideone.com/zZ181进行演示

答案 3 :(得分:2)

最直观的答案是2的幂是(length+3) & ~3

(不是以前的答案提到的~4。我们屏蔽了添加3的1和2位。)