输入一个数,判断该整数的二进制中含有多少个‘1’
思路:按位与
#include<stdio.h>
int main (void)
{
int n,count=0;
scanf("%d",&n);
while(n)
{
count++;
n=n&(n-1);
}
printf("%d",count);
return 0;
}
由这道题联想判断一个整数是否为二的N次方
思路:按位与
//注释:如果该数为2的次方,输出yes,否则输出no
#include<stdio.h>
int main (void)
{
int n,m;
scanf("%d",&n);
m=n&(n-1);
if(m==0)
printf("yes");
else
printf("no");
return 0;
}
附原题目;
给定L,R。统计[L,R]区间内的所有数在二进制下包含的“1”的个数之和。
如5的二进制为101,包含2个“1”。
输入格式
第一行包含2个数L,R
输出格式
一个数S,表示[L,R]区间内的所有数在二进制下包含的“1”的个数之和。
样例输入
2 3
样例输出
3