码迷,mamicode.com
首页 > 其他好文 > 详细

写一个函数返回参数二进制中1的个数

时间:2019-04-24 09:14:52      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:解题思路   NPU   循环   补码   return   clu   oid   参数   二进制   

题目:写一个函数返回参数二进制中 1 的个数
比如: 15 0000 1111 4 个 1
程序原型:
int count_one_bits(unsigned int value)
{
// 返回 1的位数
}
解题思路:首先写出这个数字的二进制序列并且定义一个计数器,由于数字在计算机中是以其二进制补码的形式进行存储,那么我们需要知道这个数字的二进制原码。然后通过循环右移其二进制序列和1进行按位与,如果按位与的结果是1,则计数器加一,否则继续此操作,直到右移完它的全部位数,则循环结束。
解法一:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int count_one(unsigned int value)
{
int count = 0;
int i = 0;
for (i = 0; i < 32; i++)
{
if (value >> i & 0x1)
{
count++;
}
}
return count;
}
void main()
{
unsigned int input = 0;
printf("请输入一个数:");
scanf("%d", &input);
printf("%d\n", count_one(input));
system("pause");
return 0;
}
解法二:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int count_one(unsigned int n)
{
int count = 0;
while (n!=0)
{
n=n&(n - 1);
count++;
}
return count;

}
void main()
{
unsigned int input = 0;
printf("请输入一个数:");
scanf("%d", &input);
printf("%d\n", count_one(input));
system("pause");
return 0;
}

写一个函数返回参数二进制中1的个数

标签:解题思路   NPU   循环   补码   return   clu   oid   参数   二进制   

原文地址:https://blog.51cto.com/14234314/2383528

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!