一、预备知识:
- 操作符&的工作原理:对于操作符&两个操作数,在同一个二进制位上,只有同时为1时与运算才会为1,否则为0.
- 一个整数4个字节32个比特位。
- 操作符&是位运算符,针对的是二进制位也就是比特位。
二、思路:
有了上面的预备知识,那么我们就可以一个比特位一个比特位去计数题目中所要求的二进制形式的1的个数。
先设置一个枢纽变量pivot,pivot为int类型。
当要看某个比特位是否为1时,就把pivot该比特位设置为1,其他比特位设置为0。用pivot和整数&与运算,并把结果赋给tmp。如果pivot等于tmp那么该位为1(1&1=1),否则为0(1&0=0)。
三、代码
#include <stdio.h>
int main(void)
{
int pivot = 1;
int tmp = 0;
int num = 0;
scanf("%d", &num);
int count = 0;
int i = 32;
while (i--)
{
tmp = pivot & num;
if (tmp == pivot)
{
count++;
}
pivot <<= 1;
}
printf("%d\n", count);
return 0;
}