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个位就可以了

  • 相关阅读:
    用PHP写一个代理来解决跨域问题
    curl
    centOS 安装及部署 SVN
    vue.js 安装
    谷歌开发者 代码调试同步本地文件功能
    Liunx 下的 SNMP 及 PHP如何连接
    2017年5月11日 开放大学 理财考试记
    js window.onlload 自遐想
    纯页面跳转问题
    mysql 字列问题
  • 原文地址:https://www.cnblogs.com/Deanboy/p/7530568.html
Copyright © 2011-2022 走看看