判断一个数是否是2的次方
经典的:
int IsPower(unsigned n)
{
if(n==0)
return 1;
while(n)
{
if(n%2==0)
{
n = n/2;
if(n==1)
return 1;
}
else return 0;
}
}
不必解释
超强的:
int IsPower(unsigned n)
{
return (n&&!(n&(n-1)));
}
解释:
如果一个数是2的次方,则转成2进制是首位为1,其余都为0,比如:
2(10) 4(100) 8(1000) 16(10000)……
如果一个数和全1的相与还是等于自己,则这个数就是2的次方
n&(n-1)计算的是全零的情况,故!(n&(n-1))是全1的情况
转自 http://hi.baidu.com/mzyse/blog/item/6b5f5517d5d9d30cc83d6da3.html
大道至简
程序是写给人看的,顺便给机器执行下
SO个人不推荐第二种方法