求大A并且最接近A的B的整数倍

求大A并且最接近A的B的整数倍,前提是B为2的次幂。
(A + ( B - 1 ) ) & ~( B - 1 )
原理如下:
C = A & ~( B -1 )
00000xxxxxxxxxxx & 111111111110000 == 00000xxxxxxxx0000
C <= A, 且C是B的倍数
要使C大于A,且是B的整数倍中最接近A的数,假设最接近A的数为B的N倍,那么,
B * ( N - 1 ) <= C <= B * N
需要在对B取整之前,加上B的尾数,以保证充分考虑到A对B求余得到的尾数,这也是日常工作中经常使用的手段,相当于0舍1入

(A + (B -1 )) & ~(B - 1)


这个技巧在计算机软件中广泛使用,特别是在涉及内存管理的时候,为了是内存对齐,又不浪费太多的内存,就要使用到这个方法,如apache的内存管理,效率非常的高。这个技巧可以和《使用与运算符代替求余运算符的技巧》中的算法有联系,一个是求倍数,一个是求余。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值