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。


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

  • 相关阅读:
    OPPO R9sPlus MIFlash线刷TWRP Recovery ROOT详细教程
    OPPO R11 R11plus系列 解锁BootLoader ROOT Xposed 你的手机你做主
    努比亚(nubia) M2青春版 NX573J 解锁BootLoader 并进入临时recovery ROOT
    华为 荣耀 等手机解锁BootLoader
    青橙 M4 解锁BootLoader 并刷入recovery ROOT
    程序员修炼之道阅读笔03
    冲刺8
    典型用户模板分析
    学习进度八
    冲刺7
  • 原文地址:https://www.cnblogs.com/Na2S2O3/p/13423053.html
Copyright © 2011-2022 走看看