經典問題6:c/c++ 程序設計 ---與或非問題

-------------------------------------------------------------------
經典問題6:c/c++ 程序設計 ---與或非問題
-------------------------------------------------------------------
    (1)面試題:用一個表達式,判斷一個數N是否是2的冪次方(2,4,6,8,...),不可以用循環語句做。
     1     #include <stdio.h> 
     2     #include <stdlib.h> 
     3     #include <unistd.h> 
     4      
     5    int main(int argc, char **argv) 
     6    { 
     7        unsigned int n = atoi(argv[1]); 
     8     
     9        if (n >= 1) { 
    10            if (n & (n - 1)) 
    11                printf("%d: no/n", n); 
    12            else 
    13                printf("%d: yes/n", n); 
    14        } 
    15        exit(EXIT_SUCCESS); 
    16    }
-----------
$ ./a.out 16
16: yes
-----------
知識點:
給定一個正整數(N <= 2^32),要求快速判斷它是否爲2的冪次方。(不可用循環)
通常我們知道:
 十進制      二進制
2^0 == 1  0000 0001
2^1 == 2  0000 0010
2^2 == 4  0000 0100
2^3 == 8  0000 1000
2^4 == 16 0001 0000
2^5 == 32 0010 0000
從上述規律中我們可以得出,題目最終歸結爲判斷此數的二進制表示(unsigned)中是否只有一位爲1。
--(2)!(X&(X-1))

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