#include <stdio.h>
#include <stdlib.h>
int isTrue(long x)
{
if(0==(x&(x-1))) //相与若为0,则说明x为2^n
return 1;
else return 0;
}
int main()
{
long A;
scanf("%ld",&A);
if(1==isTrue(A))
printf("%ld 是2^n\n",A);
else
printf("%ld 不是2^n\n",A);
}
思想:
若为2^n,则二进制表示为 1,10,100,1000,10000.........
A 减去1之后,变为全1,与A相与结果为零