[算法很美](位运算_3)找出落单的那个数
3、请实现一个函数,输入一个整数,输出该数的二进制表示中1的个数。
例如:9的二进制为1001,输出应为2
思路:我们复习下按位&运算
- 1&1=1
- 1&0=0
- 0&0=0
- 0&1=0
我们可以看到,只有两位上全为1的时候,才会等于一,正好可以用来检测一个数中二进制的个数
我们让给定的这个数n不断右移,每次都去判断N&1是否等于1,如下图所示:
当n=0时,循环停止
int main()
{
int n;
int ans = 0;
scanf("%d", &n);
while (n)
{
if ((n & 1) == 1)
ans++;
n = n >> 1;
}
printf("%d", ans);
return 0;
}
教学视频如下所示: