求一个整数存储在内存中的二进制中1的个数(4种)
程序员文章站
2022-07-15 09:53:59
...
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num = 0;
int count = 0;
printf("输入一个数num=");
scanf("%d", &num);
while (num)
{
if (num % 2 == 1)
{
count++;
}
num = num / 2;
}
printf("二进制中1的个数为:%d\n",count);
system("pause");
return 0;
}
当num取负数时,则不可使用方法1
优化2.
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num = 0;
int count = 0;
printf("输入一个数num=");
scanf("%d", &num);
int i = 0;
for (i = 0; i < 32; i++)
{
if ((num >> i) & 1 == 1)
count++;
}
printf("二进制中1的个数为:%d\n",count);
system("pause");
return 0;
}
上述方法每判断一个num必须循环32次
优化3.
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num = 0;
int count = 0;
printf("输入一个数num= ");
scanf("%d", &num);
while (num)
{
count++;
num = num&(num - 1);
}
printf("二进制中1的个数为:%d\n",count);
system("pause");
return 0;
}
使用int count_one_bits(unsigned int value)
{
// 返回 1的位数
}
优化4
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int count_one(unsigned int n)
{
int count = 0;
while (n)
{
if (n % 2 == 1)
count++;
n /= 2;
}
return count;
}
int main()
{
int num = 0;
printf("输入一个数num= ");
scanf("%d", &num);
int ret = count_one(num);
printf("二进制中1的个数为:%d\n", ret);
system("pause");
return 0;
}
上一篇: 求一个整数存储在内存中的二进制中1的个数
下一篇: 大型移动应用解决之道 - 依赖管理