给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入 : 1
输出 : true
解释 : 20 = 1
示例 2 :
输入 : 16
输出 : true
解释 : 24 = 16
示例 3 :
输入 : 218
输出 : false
解题思路:首先要大于零 ,还要是2的次幂,那用二进制来表示就是 1(1),10(2),100(4),1000(8) 这种,然后在判断n&n-1的结果 ,只有n为2的次幂时,n&n-1才等于0,比如: 8用二进制表示为1000, 那8-1=7 表示为0111 1000&0111=0
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
bool isPowerOfTwo(int n) {
if (n <= 0)
{
return false;
}
else
{
if ((n&n - 1) == 0)
{
return true;
}
}
return false;
}
int main()
{
int a = isPowerOfTwo(2);
printf("%d\n", a);