判断一个数是否4的整数次幂。

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做与运算即可得出结果。

posted @ 2009-12-03 12:35  zedzhao  阅读(404)  评论(0编辑  收藏  举报