面試:快速判斷一個數是否是2的冪次方,若是,並判斷出來是多少次方!
阿新 • • 發佈:2018-12-11
/********************************************************************** 將2的冪次方寫成二進位制形式後,很容易就會發現有一個特點: 二進位制中只有一個1,並且1後面跟了n個0; 因此問題可以轉化為判斷1後面是否跟了n個0就可以了。 如果將這個數減去1後會發現,僅有的那個1會變為0, 而原來的那n個0會變為1; 因此將原來的數與去減去1後的數字進行與運算後會發現為零。 最快速的方法: (number & number - 1) == 0 原因:因為2的N次方換算是二進位制為10……0這樣的形式(0除外)。 與上自己-1的位數,這們得到結果為0 例如:8的二進位制為1000;8-1=7,7的二進位制為111。兩者相與的結果為0。計算如下: 1000 & 0111 ------- 0000 ******************************************************************/ #include <iostream> using namespace std; int right_move(int value) { int x = 0; while (value>1) { value >>= 1; x++; } return x; } int main() { int num; printf("please input a inter:"); scanf("%d",&num); if (num&(num-1)) { printf("%d is not the power number of 2:\n",num); } else { printf("%d is the power number of 2,the power is %d:\n", num, right_move(num)); } }