• 位运算的应用


    使用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位取反
     
  • 相关阅读:
    JavaScript 按位与和逻辑与
    JavaScript跨域问题
    前端-知识+能力感触
    堆&堆排序
    Java中的数据类型和引用
    基础算法之选择排序
    基于TCP协议的网络通讯流程
    Java基础之封装
    个人主页
    算法基础之希尔排序
  • 原文地址:https://www.cnblogs.com/acm-bingzi/p/3289704.html
Copyright © 2020-2023  润新知