判断一个数n是否是2的次方数:
思路:利用n=n&(n-1),它的意义是从低位到高位,n的二进制位中第一次出现的1变成0.
例如:
1100 ----n
1011 ----(n-1)
n&(n-1)的结果 : 1000 ----n
0001 ----(n-1)
n&(n-1)的结果 : 0000 ----n(此时,n的值为0)
根据题意,若一个数是2的次方数,则这个数的二进制位中有且仅有一个1。
#include<stdio.h>
#include<stdlib.h>
void two_pow(int num)
{
if((num&(num-1))==0)
printf("%d是2的次方数!\n",num);
else
printf("%d不是2的次方数!\n",num);
}
int main()
{
int n=0;
scanf("%d",&n);
two_pow(n);
return 0;