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

    位运算

    最近都快忘了位运算了,知道最近学习到状压dp,又想起了位运算,今天便来总结一下。

    基本概念

    & 与:若两个相应的二进制位都为1,则该位的计算结果为1,否则为0
    | 或:若两个相应的二进制位中只要有一个为1,该位的计算结果为1
    ^ 异或:若两个相应的二进制位不同,则该位计算结果为1, 否则该位为0.
    <<左移:将一个数的各二进制位全部左移N位,右补0,相当于乘以2^N,如(a*2=a<<1)
    >>右移:将一个数的各二进制位右移N位,相当于除以2^N,如(a/2=a>>1)

    实际应用

    判断数字x第i位是否为1

          if(x&(1<<i))//判断数字x第i位是否为1
    

    将一个数字x第i位改成1

          x|=(1<<i)//将一个数字x第i位改成1
    

    判断二进制中有多少个1

    int Lowbit(int x){return x & -x;}
    int count(int x){//判断二进制中有多少个1
    	int cnt=0;
    	while(Lowbit(x)!=0){
    		cnt++;
    		x-=Lowbit(x);
    	}
    	return cnt;
    }
    

    同时可以通过函数:

    统计二进制下0的个数:__builtin_popcount(x)
    
  • 相关阅读:
    uva400 Unix ls
    cf641 div2 abcd
    cf619 div2 abcd
    cf620 div2 abcde
    atc160
    cf638 div2 abcd
    CodeCraft-20(Div. 2 abcd
    cf Round 621 abcd
    luogu1941 飞扬的小鸟
    UVA1601 The Morning afther Halloween
  • 原文地址:https://www.cnblogs.com/hellohhy/p/13198305.html
Copyright © 2011-2022 走看看