判断一个数是不是2的n次方其实是很简单的一个问题,相信大家都会做
但是接下来我这里要用的方法是基于内存中的二进制数来解决的
首先2的n次方在二进制数中是32位中只有一位1就是该数为2的n次方
这样我们只要统计二进制数中1的个数,个数为1则是该题的求解
代码:
int getnumCount(int a) {
int count = 0;
while (a) {
a = a & (a - 1);
//a-1是让它向右移一位,a & (a - 1)判断下一位是否为1
//假设a=3
//0011 a
//0010 a-1
//0010 a = a & (a - 1)
//0001 a-1
//0000 a = a & (a - 1)
count++;
}
return count;
}
//判断一个数是不是2的n次方
void istwo(int a) {
int count = 0;
int ret = getnumCount(a);
if (ret == 1) {
printf("%d:是2的n次方", a);
}
else {
printf("%d:不是2的n次方", a);
}
}
int main() {
int a = 8;
istwo(a);
return 0;
}