题解 | #查找输入整数二进制中1的个数# 高效位运算
查找输入整数二进制中1的个数
https://www.nowcoder.com/practice/1b46eb4cf3fa49b9965ac3c2c1caf5ad
C++ 位运算基本操作(本质还是:遍历法)
#include <iostream>
using namespace std;
int main() {
    int cnt = 0;
    size_t val;
    while(cin>>val){
        cnt = 0;
        while(val){
            if(val & 1) cnt++;
            val >>= 1;
        }
        cout << cnt << endl;
    }
    return 0;
}
C++ 位运算高效思路(有几个一就判断几次!)
#include <iostream>
using namespace std;
int main() {
    int cnt = 0;
    size_t val;
    while(cin>>val){
        cnt = 0;
        while(val){
            val &= (val - 1);
		  	cnt++;
		  	/*
			示例一:
			0000 0010 & 0000 0001 => 1
			示例二:
			0001 1111 & 0001 1110 => 1
		=>  0001 1110 & 0001 1101 => 2
		=>  0001 1100 & 0001 1011 => 3
			...
			由上示例可以看出每次运算都可以消掉一个 1!故:1 的个数就是该方式的循环次数!
			*/
        }
        cout << cnt << endl;
    }
    return 0;
}
小天才公司福利 1163人发布

