C语言 求一个整数存储在内存中的二进制中 1 的个数教程
目录(涉及知识点)
方法三:whlie循环、与运算 ——最高效的
- -
方法一:先取模,再进行除运算
- -
#include<stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
int count = 0;
while(num)
{
if(num % 2 == 1)
count++;
num = num /2;
}
printf("二进制中1的个数为:%d\n", count);
return 0;
}
算数操作符
/ ,只要有double浮点数时,printf用%lf,(默认6位
% ,操作数必须都是整数
方法二:与运算、右移、for循环、if判断
#include<stdio.h>
int main()
{
int num = 0;
int count = 0;
scanf("%d",&num);
int i ;
for(i = 0; i <32; i++)
{
if(1==((num >> i) & 1))
count++;
}
printf("二进制中1的个数为:%d\n",count);
return 0;
}
位操作符
- & 按 二进制 位与 。 两个同时为1,才是1。有0全是0
- | 按 二进制 位或 。 两个同时为0,才是0,有1全是1
- ^ 按 二进制 位异或。 两个相同为0,相异为1
移位操作符
======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
1.操作数只能是整数
2.移动的是二进制位
:右移操作符 。包括 算术右移与逻辑右移算术右移:是符号位要一起移动,并且在左边补上符号位
逻辑右移:是将二进制数整体右移,左边补0即可
<<:左移操作符 。左边丢弃,右边补零
Int a=-1
Int b=a>>1
b还是是-1
源码:符号位 (正0负1
反码:符号位不变,其余与源码相反
补码:反码末位+1
方法三:whlie循环、与运算
- -
=================================================
特点:循环直到num为0,循环多少次,就有多少个1,不用再用 if判断
#include<stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
int count = 0;
while (num)
{
num = num & (num - 1);
count++;
}
printf("二进制中1的个数为:%d\n", count);
return 0;
}