ALIGN(x, mask)函数详解

    xiaoxiao2021-03-26  38

    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=====33 x:  10  mask:  31=====32 x:  15  mask:  31=====33 x:  16  mask:  31=====32 x:  17  mask:  31=====33

    2.x和mask必须为整数,且不要为负。

                          

    转载请注明原文地址: https://ju.6miu.com/read-663810.html

    最新回复(0)