是否为2^n次方这个数的二进制必须只能有一个1.
比如:8的二进制:1000,是2的3次方。
16的二进制:10000,是2的4次方
15的二进制:1111,不是2的次方。
#define _CRT_SECURE_NO_WARNINGS//VS认为scanf不安全,所以要加上这个东西,
#include <stdio.h>
int main() {
int n = 0;
scanf("%d", &n);
if ((n&(n-1))==0)
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
n&(n-1)原理:
&意思是按位 与运算,
15 二进制:1111
14二进制:1110
通过与运算得出3,所以不是2的次方
16:10000
15:01111
与运算之后得出0,是2的次方