注意:不用求K是多少,只需要判断,请编写函数实现。
核心思想:按位与(&), n = m & (m - 1);
考虑2的k次方数的特点,每一个2的k次方数转化为2进制之后,只有一位为1,我们只需要判断二进制位上是不是只有一个1
用m&(m - 1)就是在消除二进制位上的1,由于二进制位只有一个1, 所以 n = 0.
#include<stdio.h>
#include<stdlib.h>
int IsPow(int m)
{
if (m < 1)
return 0;
int n = m&(m - 1);
return n == 0;//n==0是判断表达式,该表达式返回的是 真假,
//因此return n == 0;就是先判断n 是否等于0,若等于则返回真(1),否则返回假(0)
}
int main()
{
int m, k;
printf("请输入一个整数m:\n");
scanf("%d", &m);
if (IsPow(m))
{
printf("%d是2的K次方\n", m);
}
else
{
printf("%d不是2的K次方\n", m);
}
system("pause");
return 0;
}