1.判断是否为2的n次方
(X&(X-1)) == 0 只有在为true是才表明X是2的n次方,其他都不是。
2.对齐计算
#define ALIGN_BYTES 8
#define align(X) ((X)+(ALIGN_BYTES-1))&(ALIGN_BYTES-1)
3.获取一个地址如果要对齐所需的偏移量
#define ALIGN_BYTES 8
#align_offset(X) (((X)+(ALIGN_BYTES-1))&(ALIGN_BYTES-1) == 0) ? 0 : (ALIGN_BYTES - (X)&(ALIGN_BYTES-1))&(ALIGN_BYTES-1)
先用ALIGN_BYTES - (X)&(ALIGN_BYTES-1)计算出到对齐地址所需偏移,然后在&(ALIGN_BYTES-1)确保是所需对齐位数
转载于:https://blog.51cto.com/sensor/245258