ビットコンピューティングのトピック
Lowbit()アルゴリズムテンプレート/原則
- nのk番目の桁を見つけます。
n >> k & 1
- nの最後の1ビットを返すことを求めています:
lowbit(n) = n & (-n)
アルゴリズム:ロービット演算は、数値の最後の1の後のすべてのビットを毎回インターセプトし、数値が0に減少するまで、毎回ロービットによって取得された数値を減算します。最後に、1の数の
原則を取得します。コンピューターの負の数の形式は補数です。数xの元のコードが1 0001 0000であるとすると、-xの補数はすべてのビットの逆数に1を加えたものになります。つまり、0 11110000です。ロービットを実行して00001 0000を取得します。これは、必要なロービット演算です。
AcWing801。バイナリの1の数
#include <iostream>
using namespace std;
int lowbit(int x)
{
return x&(-x);
}
int main()
{
int x, n;
cin >> n;
while(n--)
{
cin >> x;
int cont = 0;
while(x) x -= lowbit(x), cont++;
cout << cont << ' ';
}
return 0;
}