目录(涉及知识点)
方法一:先取模,再进行除运算
算数操作符
方法二:与运算、右移、for循环、if判断
位操作符
移位操作符
方法三: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位
% ,操作数必须都是整数
#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
特点:循环直到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; }