根据按位与特性可以判断一个数是否是2的正整数次幂。
比如:5-->101 根据按位与特性:101 & 100 = 100 = 4 !=0
说明5不是2的正整数次幂。
再比如:4-->100 根据按位与特性:100 & 011 = 000 = 0
说明4是2的正整数次幂。
因此可以将一个数化成二进制通过与其二进制减一的按位与运算来判断其结果是否等于0,如果等于0那么这个数就是2的正整数次幂。
#include<stdio.h>
int main(){
unsigned int x,a;
scanf("%d",&x);
a= x & (x-1);
if(a == 0){
printf("%d是2的正整数次幂\n",x);
} else{
printf("%d不是2的正整数次幂\n",x);
}
int cnt = 0;
while(x!=0){
x = x & (x-1);
cnt++;
}
printf("二进制中1的个数是%d\n",cnt);
return 0;
}