编写代码,求一个整数在内存中的二进制中1的个数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写代码,求一个整数在内存中的二进制中1的个数相关的知识,希望对你有一定的参考价值。
。
1.常规性:
#include<stdio.h>
#include<string.h>
#define _CRT_SECURE_NO_WARNINGS1
int main()
int num = 0;
int count = 0;//统计1的个数
scanf_s("%d", &num);
while (num)
if (num % 2 == 1)
count++;
num = num / 2;
printf("%d\\n", count);
return 0;
与此同时,我们可以调用一个函数,其本质和以上代码相同
2.函数的调用:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>//system库函数的头文件
#define _CRT_SECURE_NO_WARNINGS1
int count_bit_one(int i,int count)
while (i)
if (1 == (i % 2))
count++;
i = i / 2;
return count;//千万不要忘记返回值
int main()
int i = 0;
scanf_s("%d", &i);
int count = 0;
count = count_bit_one(i,count);
printf("count = %d\\n", count);
system("pause");//system执行系统命令 pause为暂停
return 0;
看到以上代码,你会想:***,终于写完了,其实上面的代码存在问题,它只能执行 正数,负数不能执行,因此我们要对代码做出修改。下面我们均采用函数调用进行改写。
改动点如下:
第一种改法:将上面的 第5行(函数的声明中)将 int i 改为 unsigned int i
第二种改法:将函数的递归部分改为:
int count = count_bit_one(int i,int count)
int n=0;
for(n=0;n<32;n++)
if(1==(i>>n)&1)//移位,让二进制的每一位都与1按位与运算
count++;
return count;
对比以上写法,你是不是还可以再找出一种更为简单的写法呢?
int count_bit_one(int i,int count)
while (i)
i=i&(i-1);//直到运算到0000才结束
count++;
return count;//千万不要忘记返回值
以上是关于编写代码,求一个整数在内存中的二进制中1的个数的主要内容,如果未能解决你的问题,请参考以下文章