编写代码,求一个整数在内存中的二进制中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;

看到以上代码,你会想:***,终于写完了,其实上面的代码存在问题,它只能执行  正数,负数不能执行,因此我们要对代码做出修改。下面我们均采用函数调用进行改写。

改动点如下:

第一种改法:将上面的  编写代码,求一个整数在内存中的二进制中1的个数_#define 第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的个数的主要内容,如果未能解决你的问题,请参考以下文章

求一个整数储存在内存中的二进制1的个数

求出整数中1的个数

[NewCoder]求int型正整数在内存中存储时1的个数

华为机试HJ15:求int型正整数在内存中存储时1的个数

Java初学记录——练习题

Java初学记录——练习题