【发布时间】:2010-01-07 17:18:46
【问题描述】:
将未签名的int 舍入为4 的倍数的快速方法是什么?
4 的倍数有两个最低有效位 0,对吗?所以我可以将它们屏蔽掉,然后执行一个 switch 语句,将 1,2 或 3 添加到给定的uint。
这不是一个非常优雅的解决方案..
还有算术汇总:
myint == 0 ? 0 : ((myint+3)/4)*4
可能有更好的方法,包括一些位操作?
【问题讨论】:
-
首先,您应该从定义“next”开始(并编写规范:blogs.msdn.com/ericlippert/archive/2009/11/19/…)。
-
他的代码看起来试图在 4 的边界上对齐?
-
当
myint是4 的倍数时,您应该澄清“下一个”的含义。您的算术汇总使myint保持不变,但在这种情况下,一些回答者已经理解“下一个”的意思是@987654328 @. -
例如,"next" 可能意味着 x > n 对于给定 n,或者 x >= n,或者数字 x 使得 |x-n|对于给定的 n 是最小的,或者...
-
嗯是的 - 我的意思是 - 如果一个 int 不能被 4 整除,它应该向上舍入到 4 的下一个更高倍数
标签: c bit-manipulation