求一个数二进制中1的个数

来源:互联网 发布:阿里云计算大会 编辑:程序博客网 时间:2024/06/05 10:20
/*面试题10:  二进制中1的个数题目:请实现一个函数,输入一个整数,输出该二进制表示中1的个数。     例如把9表示成二进制是1001,有两位是1,因此如果输入9,该函数输出2.*/#if 0#include<stdio.h>/*法一:   1.先判断整数二进制表示中最右边一位是不是1,接着右移一位,此时原来处于从右边数起的第二位被移到最右边了,再判断是不是1,   这样每次移动一位,直到整个整数变成0为止   2.把整数和1做位与运算看结果是不是0,如果一个整数与1做与运算的结果是1,表示该整数最右边一位是1,否则是0.*/int NumberOf1(int n)  //负数也可以{int count = 0;unsigned int flag = 1;    while(flag){if(n&flag)  //判断n的最低位是不是1 count++;   flag = flag << 1; //左移和n做与运算,去判断n的次低位是不是1}return count;}/*法二:将一个整数减去1,都是把最右边的1变成0,如果它的右边还有0的话,所有的0都变成1,而左边的所有位保持不变。将一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变化才能0,    那么一个整数的二进制表示中有多少个1,就进行多少次这样的操作。*/int NumberOf1(int n){int count = 0;while(n){++count;n = (n-1)&n;}return count;}int main(){int num ;printf("请输入一个整数:");scanf("%d",&num);int count = NumberOf1(num);printf("该数二进制表示中1的个数是:%d\n",count);}#endif
原创粉丝点击