面试题10:求二进制中1的个数

来源:互联网 发布:如何查看域名劫持 编辑:程序博客网 时间:2024/06/10 13:35

题目:输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。


思路:可以使用位运算的与&运算,只有1&1=1,其他情况都为0,所以可以设置一个flag初始为1,如果是8位的,二进制位0000 00001,让N与flag做与运算,判断结果是否为1,为1计数,不为1,将flag左移一位,变为0000 0010,继续判断N的下一位。


#include <iostream>using namespace std;int NumberOfOne(int n){int count=0;unsigned int flag=1;while(flag){if(n&flag){count++;}flag=flag<<1;//flag左移一位,用来判断n的下一位是否为1}return count;}int main(){int num=-10;cout<<NumberOfOne(0)<<endl;return 0;}




0 0