判断一个数是否为2的幂次
int is2power(int num)
{
if(num < 2)
return 0;
if((num & num - 1) == 0 )
return 1;
else
return 0;
}
分析:这是目前我所知道的最快的方式,二进制表示的2的幂次方数中只有一个1,后面跟的是n个0; 因此问题可以转化为判断1后面是否跟了n个0。如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与上(&)减去1后的数字,结果为零。
参考博文:http://sharong.iteye.com/blog/1992322