位运算如何将一个数上调至8的倍数

2013年4月25日 由 Creater 留言 »

涉及到内存边界或者其他和操作系统位数相关情况下,很多时候需要将某个数上调,这里以上调到8的倍数为例。
比如:
1–>8
5–>8
14->16
31->32
是8的倍数的特点,8的倍数的二进制后4位必须是1000
又知道,向上调整最长的步长为7,比如1—>8 9—->16
所以可以先对某个数a进行加7,使其大于等于8的倍数。
然后再将后3bit位清0即可。

enum {_ALIGN = 8}
static size_t ROUND_UP(size_t size)
{
         return ((size + _ALIGN - 1) & ~(_ALIGN - 1));
}
广告位

发表评论

你必须 登陆 方可发表评论.