[算法問題]判斷一個數是不是2的冪?
位操作的運用:
bool?Is2Power(int?nNum)


{
????return?nNum?>?0???((nNum?&?(~nNum?+?1))?==?nNum???true?:?false)?:?false;
}






posted on 2006-07-10 23:25 那誰 閱讀(6160) 評論(17) 編輯 收藏 引用 所屬分類: 算法與數據結構
隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
|
[算法問題]判斷一個數是不是2的冪?
位操作的運用:
![]() ![]() ![]() ![]() ![]() ![]() posted on 2006-07-10 23:25 那誰 閱讀(6160) 評論(17) 編輯 收藏 引用 所屬分類: 算法與數據結構 評論# re: [算法問題]判斷一個數是不是2的冪? 回復 更多評論將((nNum & (~nNum + 1)) == nNum換成!(nNum & (nNum - 1))也許會更好一點
2006-07-11 09:48 | 3×7=51
# re: [算法問題]判斷一個數是不是2的冪? 回復 更多評論@Ying-Shen你將nNum和nNum - 1用2進制打印出來看看就知道為什么了,如果一個數不行的話多試幾個數。
2006-07-12 16:36 | 3×7=51
# re: [算法問題]判斷一個數是不是2的冪? 回復 更多評論是二的冪的數二進制表現方式:2^1 = 2 10 2^2 = 4 100 2^3 = 8 1000 .......
2006-07-30 21:16 | waterflier
# re: [算法問題]判斷一個數是不是2的冪? 回復 更多評論我有一個比較簡單的方法:可以用一行表達式來表示:#define Pow2(x) x&(x-1)?true:false 具體實現可以通過一個程序來寫: #include "stdafx.h" #include"stdio.h" #define TRUE 1 #define FALSE 0 #define POW2(X) (X)&(X-1)?(TRUE):(FALSE) void main() { int i; printf("請輸入一個整數\n"); scanf("%d",&i); if(POW2(i)) printf("false\n"); else printf("true\n"); }
2008-11-02 10:42 | pxxxb
# re: [算法問題]判斷一個數是不是2的冪?[未登錄] 回復 更多評論-2^n 不是 2 的冪。所以很多回復如return n&(n - 1) 或者 return n && (n&(n - 1)) 的前提是要把 n 聲明為無符號整數。
2010-03-27 07:32 | hzpfly
|
||||||||||||||||||||||