zoukankan      html  css  js  c++  java
  • 位运算

    一、位运算常用的两种操作:

    (1) 求n的第k位数字:n >> k & 1

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

    二、求n的第k位数字:n >> k & 1

    n =15 (1111)2 : 先把第k位移到最后一位 n >> k, 看个位是几 x & 1, n >> k & 1

    具体实现:

    #include<iostream>
    
    using namespace std;
    
    int main()
    {
    	int n=10;
    	
    	for(int k=3; k>=0; K--) cout << (n >>i & 1) << endl;
    	
    	return 0;
    }
    

    三、lowbit是树状数组的基本操作

    1. lowbit(x)的作用: 返回x的最后一位 1:

    (1) x = 1010 lowbit(x) = 10

    (2) x = 101000 lowbit(x) = 1000

    2. lowbit(x) 的实现过程:

    x & -x = x & (~x + 1)

    -x = ~x + 1

    x = 1010 ....10000

    ~x = 0101 ....01111

    ~x + 1 = 0101 ....10000

    x & (~x + 1) = 0000 ....10000

    3. lowbit(x)的应用:求二进制中 1 的个数

    具体实现:

    #include <iostream>
    
    using namespace std;
    
    int lowbit(int x)
    {
    	return x & -x;
    }
    int main()
    {
    	int n;
    	cin >> n;
    	while (n--)
    	{
    		int x;
    		cin >> x;
    		int res = 0;
    		while(x) x -= lowbit(x), res++;//每次减去x的最后一位1
    		cout << res <<endl;
    	}
    	return 0;
    }
    

    查看更多

  • 相关阅读:
    RecycleView的万能适配器
    Android Fragment
    BottomNavigationBar底部导航条用法
    Bundle的用法
    登录页面(动态地与数据库匹配用户信息)
    LitePal用法详解
    BaseAdapter的优化
    Bmob使用心得
    字符串格式化
    元素NULL判断
  • 原文地址:https://www.cnblogs.com/lastk/p/12896553.html
Copyright © 2011-2022 走看看