zoukankan      html  css  js  c++  java
  • 位运算

    1.特定位置1用 "|"

    2.特定位取反用 "^"
    (任何数,其实就是1或者0)与1位异或会取反,与0位异或无变化操作手法和刚才讲的位与是类似的。
    3.特定位清零用 "&"

    例1:写一个宏将a的bit2置位

      通用:#define  SETBIT(a, n)      (a  |  (  (1U)  <<  n ) )

           #define SETABIT2  (a  | ((1U) << 2))

    例2:截取变量的部分连续位,把第n到第m位取出来

      变量0x88, 也就是10001000b,若截取第2~4位,则值为:100b = 4

      #define GETBITS(x, n, m) ((x & ~(~(0U)<<(m-n+1))<<(n-1)) >> (n-1))

    这个题目相当于是要把x的bit(n-1)到bit(m-1)取出来
    复杂宏怎么分析:
    1.~(0U)<<(m-n+1)
    0取反得到0xffff ffff,然后从n到m一共有m-n+1个1,左移这么多位
    2.~(~(0U)<<(m-n+1))
    再取反,就得到了m-n+1个1
    3.~(~(0U)<<(m-n+1))<<(n-1)
    再左移n-1个位,就使得n-m位为1
    4.x & ~(~(0U)<<(m-n+1))<<(n-1)
    然后与x相与,得到n-m位的值,其他位置0,然后再右移n-1位即得到n-m位的值
    其实主要是为了得到n-m位的值,得到这个值后再右移n-1个位就可以了

  • 相关阅读:
    P6585 中子衰变
    [APIO2020]有趣的旅途
    CF1354F Summoning Minions
    CF1361C Johnny and Megan's Necklace
    CF1368E Ski Accidents
    CF1458C Latin Square
    CF1368F Lamps on a Circle
    用户和组的管理
    Windows命令
    1
  • 原文地址:https://www.cnblogs.com/Deanboy/p/7530568.html
Copyright © 2011-2022 走看看