1. 程式人生 > >使用位運算判斷整數是否可被2的冪(2、4、8、16……)整除?

使用位運算判斷整數是否可被2的冪(2、4、8、16……)整除?

作者:CodeArhat 
來源:CSDN 
原文:https://blog.csdn.net/codearhat/article/details/6821990 

 

// 大部分位運算的技巧早在幾十年前就被前輩們在有限的計算環境下“榨”出來了。
// “原創”只是表示這篇文章是我所寫,並非翻譯或轉貼,但也絕不是我“首創”。

能被2^N整除(N >= 1),則a的二進位制表示中,低N位全為0,因此:

(a %  2)  <==> (a &  1)
(a %  4)  <==> (a &  3)
(a %  8)  <==> (a &  7)
(a % 16)  <==> (a & 15)  <==> (a & ((1 << 4) - 1))
……


現在的編譯器已經足夠聰明,上面左邊的表示式很可能會被自動優化,所以可能看不出求餘與按位與的效能差距。
但能在DEBUG模式下快一點,還是有價值的。(設想正常要跑一分鐘的程式,除錯時需要10分鐘才能執行到你所下的斷點,會是多麼痛苦……)