一、求解二进制表示的第k位数字

#include<iostream>
using namespace std;
int main()
{
	int n = 10; // 例如,十进制10用二进制表示为1010 
	
	for(int k=3;k>=0;k--)
	  cout << (n >> k & 1);
	  // 第一步:右移k位
	  // 第二步: & 1,即 与1 
	  
	return 0;
}  

二、 lowbit计算x二进制表示中1的数目
关于函数lowbit
在C++中,x & (-x) == x & (~x + 1)
根据以上等式,在二进制表示下,那么lowbit(x)的返回值有如下规律:
1、若x == 101010000,则返回值为10000
2、若x == 101011000,则返回值为1000
3、若x == 1010100010,则返回值为10
即lowbit(x)的返回值保留了x最右边的一个1以及这个1右边的所有0
关于如何使用lowbit计算x二进制表示中1的数目
根据上面的论述,在x变为0之前,每次将x减去lowbit(x),
并记录减操作的次数,该次数就是x二进制表示中1的数目

#include<iostream>
using namespace std;
int lowbit(int x)
{
    return x & -x ;
}
int main()
{
    int n;
    cin >> n;
    
    while (n -- )
    {
        int x;
        cin >> x;
        
        int num = 0;
        while(x) x -= lowbit(x) , num ++ ;
        
        cout << num << " " ;
    }
    
    return 0;
}
                


















