ビット演算の判断2の正の整数べき乗

2263 ワード

     n    n    2     
   :(! (n & (n-1)) && n

    : n = 16 = 10000,n-1 = 15 = 111110000 & 01111 = 00000 = 0 
     : n = 256 = 10000000 ,n-1 = 255 = 11111111100000000 & 011111111 = 000000000 = 0

  ,      n  2      ,  n         1000.... n-1        1111.... 
 : n & n-1 = 0     (! (n & (n-1))   1 ; && n :   n   


コードは次のとおりです.

#include 
int main(){
    int n;
    while(~scanf("%d",&n)){
        if(!(n & (n-1)) && n)
            printf("%d 2     
"
,n); else printf("%d 2
"
,n); } return 0; }