位运算之判断二的正整数幂

给定整数 n 判断 n是否为 2的正整数幂
表达式:(! (n & (n-1)) && n

举个例子: n = 16 = 10000,n-1 = 15 = 1111
那么 :10000 & 01111 = 00000 = 0 
再举个例子: n = 256 = 10000000 ,n-1 = 255 = 11111111
那么:100000000 & 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",n);
        else
            printf("%d不是2的正整数幂\n",n);
    }
    return 0;
} 


你可能感兴趣的:(C)