二进制中1的个数
二进制中1的个数
统计一个二进制数中一个个数,我们采用的是位运算的方式
利用 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
如有错误,欢迎指正!