• 【OI】位运算操作


    一、基础操作

    1.a<<b

    将二进制a左移b位,不够的地方用0补位

    例如

    100<<2 == 10000

    2.a>>b

    将二进制a右移b位

    例如

    100>>2 == 1

    3.a|b

    或操作(按位或),相同位中只要有一个1或者两个1则结果为1,全0则结果为0

    4.a&b

    与操作(按位与),相同位中只要都是1,则结果为1,如果一个为0一个为1或者都是0则结果为0。

    5.a^b

    异或,相同位只要一个1一个0,则结果为1;相同位二进制相同则结果为0 。

    二、进阶操作

    1.快速求2^n

    1<<n == pow(2,n)

    原理:1<<n的意思是1的二进制向左移动n位,则此数二进制形式变成了 100000...000(n个0),恰好是2^n

    2.判断奇数偶数

    n&1 == 1则为奇数

    n&1 == 0则为偶数

    原理:n&1的意思是n与1,那么n与1中,1除了右端位为1其他位都是0,则由与运算得到的结果中其他位必定都是0 。

    所以最后得到的结果只与1的右端位和n的右端位有关,我们知道1的右端位为1,那么n的右端位只有为1的时候与1进行与运算的结果是1;n的右端位只有为0的时候与1进行与运算的结果是0 。

    显然二进制右端位为1的时候该数为奇数,为0时该数为偶数,所以得证。

    3.lowbit

    a&(-a) 代表着a的二进制的最后一位。

    原理:涉及到二进制的补码知识,感兴趣的人可以自己了解。

    三、高阶操作

    1.a >> b & 1 代表着如果a的第b位为1则为真

    用来判断二进制的某一位

    原理:a左移b位,则a的右端位就是原来a的第b位,这时与1做与运算(1左边的0由与运算性质得没有影响)就可以得知这一位是1还是0(1&1 == 1,0|1 == 0 )

    2.a|(1<<n) 代表着将a的二进制的第n位设为1

    原理:1<<n可以看作由一个1和n个0组成的二进制数,其中0的部分由或的性质(0|0==0,1|0==1)可以知道不会对二进制位产生影响。

    而1的部分由或的性质(1|1==1,0|1=1)可以得出一定是1。 

    四、图论

    x表示要判断的点,S表示集合

    (1 << x) & S == true 即x在S集合里,如果为false则x不在S集合里 

    S = S | (1 << x) 表示S集合中加入了x点 

  • 相关阅读:
    python定制类详解
    python格式化
    python3和2的区别
    深度优先和广度优先遍历
    python偏函数
    python匿名函数
    android 应用能够安装在什么地方
    C语言文件操作函数
    病毒木马查杀实战第026篇:“白加黑”恶意程序研究(上)
    函数指针
  • 原文地址:https://www.cnblogs.com/dudujerry/p/11275205.html
Copyright © 2020-2023  润新知