判断一个数是否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做与运算即可得出结果。

转载于:https://www.cnblogs.com/zedzhao/articles/1616115.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值