当前位置:   article > 正文

c++算法学习笔记 (10) 位运算

c++算法学习笔记 (10) 位运算

1.求n的二进制位表示中第k位是几:

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int n = 10;
  6. for (int i = 3; i >= 0; i--)
  7. { // 求n的第i位
  8. cout << ((n >> i) & 1) << " ";
  9. } // 输出1 0 1 0
  10. return 0;
  11. }

2.lowbit(x):返回x的最后一位1 (=x&-x)

例:lowbit(100010)=10

例题:二进制中1的个数

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

输入格式

第一行包含整数 n。

第二行包含 n 个整数,表示整个数列。

输出格式

共一行,包含 n 个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中 1 的个数。

数据范围

1≤n≤100000,
0≤数列中元素的值≤10^9

输入样例:

  1. 5
  2. 1 2 3 4 5

输出样例: 

1 1 2 1 2

 代码:

  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)
  17. {
  18. x -= lowbit(x); // 每次减去x的最后一位1
  19. res++;
  20. }
  21. cout << res << " ";
  22. }
  23. return 0;
  24. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/283673
推荐阅读
相关标签
  

闽ICP备14008679号