核心思想:X86环境下int位4个字节(32位 == 32bit)
使用for循环,32次
使用 >> 操作符,每次移动i位(i从0开始)
是用 & 操作符,来进行比较(题目是找1),所以& 1就可以
代码内部:
创建变量(i),开始循环,次数32次,i从0开始
2.创建变量count,来统计1的个数
3.每次循环时,启动判断。if(n >> i & 1) == 1),count++
代码块:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
//查找元素中二进制位,1的个数
//核心思想:
//1.X86环境下,一个整形4个字节 - 32位(bit)
//2.所以遍历一个整形的二进制位,需要32次
//3.使用 >> 操作符进行遍历
int x = 0;
scanf("%d", &x);
int i = 0;
int count = 0;
for ( i = 0; i < 32; i++)//创建遍历 | 循环,循环次数32次
{
if (x >> i & 1 == 1)//每一次,都需做判断,二进制位是否为1
{
count++;
}
}
printf("%d这个数二进制位有:%d个1",x, count);
return 0;
}
![](https://img-blog.csdnimg.cn/img_convert/0fcf3f1ab92e0ee96ba518131f1fdef7.png)
输入4
输入-1
![](https://img-blog.csdnimg.cn/img_convert/a7998ec3e18531197fab1b85876ab843.png)