• 简谈位运算


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

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


    一、  &

    对于这个符号,大家更常见的双&。单&意为按位或,把参与运算的两个数对应的二进制位相与,只有对应的两位都为“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。


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

  • 相关阅读:
    Linux(Debian、Ubuntu、Deepin等)安装最新版Chrome Unstable
    JavaScript根据经纬度获取距离信息
    CSS滚动条样式定制
    Linux下 Apache Vhost 配置 防止403
    Unity减小安装包的体积(210MB减小到7MB)
    Ubuntu17.04配置LNMP(Nginx+PHP7+MySQL)简单教程 快速 易学 简单易懂
    Yii2项目实现Markdown功能 在线Markdown编辑器
    Gradle全局代理配置
    Angular4.0从入门到实战打造在线竞拍网站学习笔记之三依赖注入
    Python使用PyMysql操作数据库
  • 原文地址:https://www.cnblogs.com/Na2S2O3/p/13423053.html
Copyright © 2020-2023  润新知