bool judge1(int x)
{
if( x &(x-1) )
return false;
return x& 0x55555555;
}
bool judeg2(int x)
{
int iTmp;
for(; x !=0; x = x >>2)
{
iTmp = x &3; /*查看最右侧的两个二进制数 , 只有最右侧的两个二进制数为"01",而且在这个"01"前没有数值,才是要找的数值;否则不是4的N次方的数值*/
switch(iTmp)
{
case 1:
if ( iTmp = x ) /*如果iTmp为1的话,那么x在这个1前面不能再有数值,否则也不是我们要找的数*/
return true;
case 0:
continue;
break;
default:
return false;
}
}
}
4的整数次幂的二进制数都为 100,10000,1000000
1的后面跟偶数个0
只有这种形式的二进制数才有 x & (x-1) 为0
0x55555555 二进制数为0101 0101....这种
刚好是奇数位上的位都为1, 有了 x&(x-1)的判断后 与0x55555555做与运算即可得出结果。