Operación de bits AcWing 801

#include<iostream>

using namespace std;

int lowbit(int x)
{
    
    
	return x&(-x);
}
/*lowbit原理
根据计算机负数表示的特点,如一个数字原码是10001000,
他的负数表示形势是补码,就是反码+1,反码是01110111,
加一则是01111000,二者按位与得到了1000,就是我们想要的lowbit操作*/

int main()
{
    
    
	int n,ans;
	scanf("%d",&n);
	while(n--)
	{
    
    
		int x;
		ans=0;
		scanf("%d",&x);
		while(x) x-=lowbit(x),ans++;
		printf("%d ",ans);
	}
	return 0;
}
求n的第k位数字: n >> k & 1//第k位是从后往前数的   与运算输出的是最少的位 例如1为一位所以不管n再大输出的也是一位
返回n的最后一位1lowbit(n) = n & -n

Supongo que te gusta

Origin blog.csdn.net/qq_47874905/article/details/109725043
Recomendado
Clasificación