首页 > 全部文章, 学习笔记, 经典网摘 > 判断一个数是否是2的次方

判断一个数是否是2的次方

2010年1月20日

经典的:
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

  1. 2010年1月31日13:02 | #1

    大道至简
    程序是写给人看的,顺便给机器执行下

    SO个人不推荐第二种方法

  1. 本文目前尚无任何 trackbacks 和 pingbacks.
click to change 看不清?点击换一张!