题解 | #查找输入整数二进制中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; }