位运算

二进制中1的个数

位运算:

例:补码等于反码加1(-x=~x+1)

源码:  x=10 1000 1000

反码:~x=01 0111  0111

补码: -x=01 0111  1000

让一个数用二进制表示:

   for(int i=31;i>=0;i--)
    {
        cout<<(n>>i&1)<<" ";
    }

lowbit(x)运算:找出x(二进制形式) 的最后一位1:x&-x = x&(~x+1) 

例:x=10 1000 1000

  ~x=01 0111 0111

  -x=01 0111 1000

    x&-x=00 0000 1000

 

给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数:

 1 #include<iostream>
 2 using namespace std;
 3 const int N=1e5+10;
 4 int lowbit(int x)
 5 {
 6     return x&-x;
 7 }
 8 int main()
 9 {
10     int n,a[N];
11     cin>>n;
12     for(int i=0;i<n;i++)
13     {
14         cin>>a[i];
15         
16         int ans=0;
17         while(a[i])
18         {
19             a[i]-=lowbit(a[i]);
20             ans++;
21         }
22         cout<<ans<<" ";
23     }
24 }

 

posted @ 2023-09-15 18:14  hello_0  阅读(18)  评论(0)    收藏  举报