一、问题的描述
求一个整数存储在内存中的二进制中的1的个数。
举例:
8 二进制 为 1000 1 的个数为 1
7 二进制 为 0111 1 的个数为 3
二、方法一
缺点: 不能计算负数二进制中的1的个数
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int n = 0;
int count = 0;
printf("请输入一个整数: ");
scanf("%d", &n);
while (n != 0) {
if (n % 2 == 1) {
count++;
}
n /= 2;
}
printf("这个整数中 1 的个数为: %d\n", count);
return 0;
}
三、方法二
#include <stdio.h>
int main() {
int n = 0;
int count = 0;
printf("请输入一个整数:");
scanf("%d", &n);
for (int i = 0; i < 32; i++) {
if (1 == ((n >> i) & 1)) {
count++;
}
}
printf("你输入的整数有 %d 个 0 !!\n", count);
return 0;
}
四、方法三
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int n = 0;
int count = 0;
printf("请输入一个整数: ");
scanf("%d", &n);
while (n)
{
n = n & (n - 1);
printf("%d\n", n);
count++;
}
printf("这个整数的二进制中 1 的个数有 %d 个\n", count);
return 0;
}