zoukankan      html  css  js  c++  java
  • 位运算的应用

    使用Pascal的OIers简要介绍一下C/C++样式的位运算(bitwise operation)。其优先级:not>and>xor>or
     
    名称
    C/C++样式
    Pascal样式
    简记法则
    按位与
    &
    and
    全一则一,否则为零
    按位或
    |
    or
    有一则一,否则为零
    按位取反
    ~
    not
    是零则一,是一则零
    按位异或
    ^
    xor
    不同则一,相同则零
    左移位
    <<
    shl
    a<<k等价于a*2k
    右移位
    >>
    shr
    a>>k等价于a/2k

     

    •位运算的特殊应用
      and
      用以取出一个数的某些二进制位
      取出一个数二进制中的最后一个1(lowbit):x&-x
      or将一个数的某些位设为1
      not间接构造一些数:~0u=4294967295=232-1
      xor
      不使用中间变量交换两个数:
      a=a^b; b=b^a; a=a^b;
      将一个数的某些位取反
     
     
    •获取一个或多个固定位的值
        假设x=1010(10进制的10)
        我们要获取从左边数第2位的值,那么我们可以这样来取
        x&(1<<1)也就是
        x:               1010
        1<<1:         0010
        x&(1<<1)   0010
        这样我们就可以通过判断x&(1<<2)是否等于0来知道这一位是0还是1了
        当然我们可以用x&(3<<2)来取得第3位和第4位
     
     
    •把一个或多个固定位的值置零
        假设x=1010(10进制的10)
        我们要把从左边数第2位的值置零,那么我们可以这样来做
        x&(~(1<<1))也就是
        x:                    1010
        ~(1<<1):         1101
        x&(~(1<<1))   1000
        当然我们可以用x&(~(3<<2))来把第3位和第4位置零
     
     
    •把一个或多个固定位的值取反
        假设x=1010(10进制的10)
        我们要把从左边数第2位的值取反,那么我们可以这样来做
        x^(~(1<<1))也就是         如果x=1000
        x:                1010                 1000
        1<<1:         0010                  0010
        x^(1<<1) :  1000                  1010
        当然我们可以用x^(3<<2)来把第3位和第4位取反
     
  • 相关阅读:
    db2中的常用命令及使用方法
    互联网服务应用协议设计
    Zookeeper整理(一)- 写操作产生事件,写操作与Watcher对应关系
    实现自己的连接池(一)
    SMP、NUMA、MPP体系结构介绍
    随手备忘 ubuntu12.04 lts 安装gcc 4.8
    认真体会 结构体中的零长度数组
    由内存池实现总结内存对齐问题
    认真理解 oom killer 备忘
    仔细体会 epoll中的et lt模式
  • 原文地址:https://www.cnblogs.com/acm-bingzi/p/3289704.html
Copyright © 2011-2022 走看看