求一个数二进制中1的个数(优化)。求一个数是不是2的n次方
求一个数二进制中1的个数:
一般方法:
#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsignedint
value)
{
int count = 0;
for (int i = 0; i < 32; i++)
{
if (value & 1 == 1) (%2相当于&1)
{
count++;
}
value =
value >> 1; (右移一位相当于除2)
}
return count;
}
int main()
{
unsigned
int value= 0;
scanf("%d" , &value);
int ret = count_one_bits(value);
printf("%d\n" , ret);
system("pause" );
return 0;
}
优化:
#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsignedint
value)
{
int
count = 0;
while
(value
) //value如果不为零则进入循环
{
count++; //因为value不为0,所以二进制中至少有一个1
value
=
value &(value
- 1); //n与n&(n-1)二进制中总是差一个1
}
return
count;
}
intmain()
{
unsigned
int
value= 0;
scanf("%d", &value);
int
ret = count_one_bits(value);
printf("%d\n", ret);
system("pause");
return
0;
}
求一个数书不是2的n次方:
#include<stdio.h>
int main()
{
int num=0;
scanf("%d",&num);
if((value&(value-
1))==0);
printf("yes\n");
else
printf("no\n");
return0;
}