ALGIN()和ROUNDUP()

最近有遇到一个api:

#define ROUNDUP(a,b) (((a) + ((b) - 1))  & ~((b)-1))

#define ROUNDDOWN(a,b) (((a) +   & ~((b)-1))

#define ALIGN(a,b) ROUNDUP(a,b)

ALIGN其实用的就是ROUNDUP(),只要搞懂ROUNDUP()和ROUNDDONW()就好。

比如a=5, b=32;

  1. ((5) + (32-1)) & ~(32-1)
  2. (5+31) & ~31
  3. 0x24 & 0xFFFFFFE0-------------32位机器
  4. 0xFFFFFFE0

其实b就是mask,屏蔽掉比mask小的位,如果是up就像上取整数mask,如果是donw就像下取整数0

posted @ 2022-05-06 10:48  老胡同学  阅读(63)  评论(0)    收藏  举报