概述
1、用宏定义来完成位运算
1、置位
置位特定位n:#define SET_NTH_BIT(x, n) ( x | ((1U)<<(n-1)) )
置位n到m位:
#define SET_BIT_N_TO_M(x,n,m)(x | (~((~0u)<<(m-n+1)))<<(n-1))
分析:
第一步:( (~0u) <<(m-n+1) ) 运行结果是等到0到(m-n+1)位是0,(m-n+2)到31位是1
第二步:(~((~0u)<<(m-n+1)))将第一步的运行结果按位取反。即0到(m-n+1)位是1,(m-n+2)到31位是0
第三步:(~((~0u)<<(m-n+1)))<<(n-1) 将第二步的32位数向左移动(n-1)位,等到(n-1)到(m-1)位为1,其余为0。
第四步:采用位或,将特定位置为1/
2、复位
复位特定位:#define CLEAR_NTH_BIT(x, n) ( x & ~((1U)<<(n-1)) )
复位n到m位:
#define CLEAR_BIT_N_TO_M(x,n,m) (x & ((~0u)<<(m-n+1))<<(n-1))
3、截取变量的部分连续位
#define GETBITS(x, n, m) ( (x & ~(~(0U)<<(m-n+1))<<(n-1)) >> (n-1) )
最后
以上就是贪玩白云为你收集整理的用宏定义来完成位运算(置位,复位,截取)的全部内容,希望文章能够帮你解决用宏定义来完成位运算(置位,复位,截取)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复