//判断n是否为2的幂
#include<stdio.h>
int foo( int i );
int foo_(int i);
int foo_1(int );
int main()
{
int bool1=foo(1);
bool1=foo_(1024);
bool1=foo_1(1024);
printf("%d",bool1);
return 0;
}
int foo (int n)
{
int a=n;
if(n<=0) return -1;
a=((a&0xAAAAAAAA)>>1)+(a&0x55555555);
a=((a&0xCCCCCCCC)>>2)+(a&0x33333333);
a=((a&0xF0F0F0F0)>>4)+(a&0x0F0F0F0F);
a=((a&0xFF00FF00)>>8)+(a&0x00FF00FF);
a=((a&0xFFFF0000)>>16)+(a&0x0000FFFF);
if(a==1) return 1;
else return -1;
}
int foo_(int i)
{
if (i%2==0&&i==2)
return 1;
else if (i%2==0&&i!=2)
return foo_(i/2);
else return -1;
}
int foo_1( int i)
{
if ((i&(-i))==i)
{
printf("\nHHH\n");
return 1;
}
else return -1;
}