ALIGN(x, mask)函數詳解
詳細定義為:
#define ALIGN(x, mask) (((x) + ((mask)-1)) & ~((mask)-1))功能為:對x取mask的整數倍,如果x沒有達到mask的最接近整數倍,補值達到最近的整數倍實例:
設x=5,mask=32
~(mask-1):-32____((x) + (mask-1)):36____((x) + (mask-1)) & ~(mask-1)):32~(mask-1):ffffffe0____((x) + (mask-1)):24____((x) + (mask-1)) & ~(mask-1)):20從上面可以看出:~(maks-1)=0xffffffe0,是讓低位為5個0,再和其它值去&運算,就相當于是其它值小于32位的部分被直接去掉為0,為了達到超過32的目的,需要讓除0外的任何一個值都要達到或超過32,
如0,加32-1值,對應為31,去掉小于32的部分,就是0
如1,加32-1值,對應為32,去掉小于32的部分,就是32
如2,加32-1值,對應為33,去掉小于32的部分,就是32
。。。。。。
如31,加32-1值,對應為62,去掉小于32的部分,就是32
如32,加32-1值,對應為63,去掉小于32的部分,就是32
如33,加32-1值,對應為64,去掉小于32的部分,就是64
依次類推:對于前32個數內為0的,保持不變
對于前32個數內,為1~31的,去掉低于32的部分,并加32
高于32部分不受影響。
限制,
1.這個算法,要求mask,必須對應為2^n次方才行,如果不是,就會報錯。如mask 為31時的值
x: 5 mask: 31=====33x: 10 mask: 31=====32x: 15 mask: 31=====33x: 16 mask: 31=====32x: 17 mask: 31=====33
2.x和mask必須為整數,且不要為負。
新聞熱點
疑難解答