如何判断一个大于0的数是否为2的方幂呢?我们知道,如果一个数是2的幂次方,那么这个数转化为二进制数后,它有且仅有一位为1,那么该如何判断一个二进制数里面仅有一位为1呢,这时,我们自然而然地想到了遍历二进制数的每一位,看一下它是否为1,但是否有更简便的做法呢?
//判断一个数是否为2的方幂,如果是,它是多少次方
#include <stdio.h>
void Power(int n);
int main()
{
int n = 1024;
Power(n);
return 0;
}
void Power(int n)
{
int m = n;
if(n > 0 && (n & (n - 1) )== 0)
{
int power = 0;
while(n)
{
n >>= 1;
++power;
}
printf("%d是2的%d次方\n",m ,power - 1);
}
else
{
printf("%d不是2的幂次方\n", n);
}
}
在代码中,我们使用了与操作 n & (n - 1) 如果只有一个1,那么结果必然是0.