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位取反
     
  • 相关阅读:
    linux安装mongo-c-driver
    DPDK在虚拟机上运行时,报错: Ethdev port_id=0 requested Rx offloads 0xe doesn't match Rx offloads capabilities 0x82a1d in rte_eth_dev_configure()
    用python写xml文件
    openvas在centos中扫描单项的python实现
    ARP协议的报文格式
    python装饰器使用
    openvas漏洞扫描:使用openvas时扫描漏洞时,报告中显示的数据与数据库数据不同
    单链表实现一元多项式乘法与加法运算(C语言)
    Java学习笔记DayN Java高级特性概况
    Java学习笔记Day5 集合
  • 原文地址:https://www.cnblogs.com/acm-bingzi/p/3289704.html
Copyright © 2011-2022 走看看