title: 【AcWing】算法学习-二进制-更新中
tags:

  • acwing
  • 二进制
    abbrlink: e7fde3bf
    date: 2021-04-11 14:29:15

二进制的笔记

n的二进制表示中第k位是几,例如

n=15=(1111)2

思路

  1. 先把第k位移到最后一位(n>>k)
  2. 观察一下个位是几(x&1)

公式

n>>k&1

函数

lowbit(x)返回x的最后一位1

  1. x=1010 lowbit(x)=10
  2. x=101000 lowbit(x)=1000

实现原理:x&-x(=x&(~x+1))

例题:AcWing 801.二进制中1的个数

  1. #include<iostream>
  2. using namespace std;
  3. int lowbit(int x)
  4. {
  5. return x & -x;
  6. }
  7. int main()
  8. {
  9. int n;
  10. cin>>n;
  11. while(n--)
  12. {
  13. int x;
  14. cin>>x;
  15. int res=0;
  16. while(x) x-=lowbit(x), res++;
  17. cout<<res<<' ';
  18. }
  19. return 0;
  20. }