我无法理解这个宏是什么.这些在
linux内核中定义,但我的疑问是独立的.我无法理解(((x)(mask))&〜(mask))行是什么.
#define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) #define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask))
任何帮助赞赏.
解决方法
假设你有一个数字:0x1006
由于某些原因,您希望将其与4个字节的边界对齐.
使用4字节边界,您知道对齐的值为0x1000,0x1004,0x1008等
然后您也知道0x1006的对齐值为0x1008.
你会如何获得0x1008?对齐值4的对准掩模为(4 – 1)= 0x03
现在0x1006 0x03 = 0x1009和0x1009& 〜0x03 = 0x1008
此操作是__ALIGN_MASK宏.
如果要传递值4(对齐方式)而不是直接传递0x03(对齐掩码),则具有ALIGN宏