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

    我们在平时抄题解做题时,常常会看到“<<”、“>>”之类的符号,这些看上去狂甩酷拽吊炸天的符号就是位运算。

    这里我简单说一下位运算符号。


    一、  &

    对于这个符号,大家更常见的双&。单&意为按位或,把参与运算的两个数对应的二进制位相与,只有对应的两位都为“1”时,结果的对应为才为1,否则为0。

    如,9的二进制位00001001,7的二进制位00000111,两个数只有最后一位都是1,故9&5的运算结果为00000001,输出1。

    二、|

    与&类似,双|表示或,单|表示按位或。将参与运算的两数对应的二进制位相或,只要对应为有一个是“1”,结果的对应为就为1。

    如,9的二进制位00001001,7的二进制位00000111,两数相或得到的就是00001111,输出结果为15。

    三、^

    ^是按位异或,把参与运算的两个数对应的二进制位相异或,若对应位的数字不同,即一个为0、另一个为1时,结果的对应位为1,若相同则为0。

    如,9的二进制位00001001,7的二进制位00000111,两数按位异或的运算结果为00001110,输出结果为14。

    四、~

    这是取反,把运算数的各个二进制为按位求反,即0变1,1变0。

    如,9的二进制位00001001,求反后是11110110。需要注意的是,用于计算的数字要放在~后边,9取反要写~9。


    以上四种位运算在实际做题中遇见的较少,至少我遇到的比较少。

    这并不代表它们不重要,在某些情况下使用以上4中位运算会更加便利。

    题目中比较常见的位运算是左移和右移。

    一、左移

    左移符号是“<<”,即两个小于号,使用格式为a<<b,它的意思是将a的二进制的每一位都向左移动b位,如,1 << 2,即将1 每一位都向左移动2位,于是,00000001就变成了00000100,从1变成了4。

    左移n位,原数就变成 原数 * 2^n。

    二、右移

    右移符号是“>>”,使用格式同左移,为a>>b,表示a的每一位都向右移动b位,4>>2即将4的每一位都向右移动2位,从00000100变为00000001。

    右移n位,原数就变成 原数 / 2^n。


    左移和右移在一般的计算中要快一点,能起一定的优化作用。

  • 相关阅读:
    poj1286 polya计数法
    hdu 2079 普通母函数的应用
    hdu1521 指数型母函数 求解多重集排列数
    hdu1398 普通母函数的应用 解决多重集组合问题
    hdu1085 多重部分和问题
    二部图最大匹配问题的求解 匈牙利算法
    tarjan算法
    Prim算法
    无向图连通图(割)
    无向图找桥
  • 原文地址:https://www.cnblogs.com/Na2S2O3/p/13423053.html
Copyright © 2011-2022 走看看