位运算
二进制中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 }
浙公网安备 33010602011771号