ALIGN(x, mask)函数详解

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:求余为0~31部分,和上面描述相同;2: 余下的部分,是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必须为整数,且不要为负。

                      

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值