求大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的內存管理,效率非常的高。這個技巧可以和《使用與運算符代替求餘運算符的技巧》中的算法有聯繫,一個是求倍數,一個是求餘。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章