统计一个二进制数中一个个数,我们采用的是位运算的方式
利用 n & -n 的方式,它的返回值为最后一个1截断后面的数的大小
例如:n = 10,n & -n = (10)2
-n = ~n + 1
n & -n = n & (~n + 1)
n = 1010·······100000······
~n = 0101·······011111······
~n + 1 = 0101·······100000·····
n & (~n + 1) = 0000······100000····
1 #include <iostream> 2 3 using namespace std; 4 5 int main() { 6 int n; 7 8 cin >> n; 9 int ans = 0; 10 11 while (n) { 12 n -= n & -n; 13 ans++; 14 } 15 16 cout << ans << endl; 17 return 0; 18 }
二级制第k位为:n >> k & 1
原文:https://www.cnblogs.com/Lngstart/p/12261650.html