判斷一個數是否爲2的冪次

int is2power(int num) 
{  
    if(num < 2)  
       return 0;  
    if((num & num - 1) == 0 )  
       return 1;  
    else  
       return 0;  
 }  
分析:這是目前我所知道的最快的方式,二進制表示的2的冪次方數中只有一個1,後面跟的是n個0; 因此問題可以轉化爲判斷1後面是否跟了n個0。如果將這個數減去1後會發現,僅有的那個1會變爲0,而原來的那n個0會變爲1;因此將原來的數與上(&)減去1後的數字,結果爲零。

參考博文:http://sharong.iteye.com/blog/1992322


發佈了130 篇原創文章 · 獲贊 13 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章