https://m.toutiao.com/is/Jben8H9/
在很多开源项目中都会使用宏定义的方式实现一些特定的位运算,以及在一些面试过程中,都会涉及分析其工作原理,因此这节来拓展下宏定义实现位运算的知识。
#define SET_BIT_N(x, n) (x | (1U<<(n)))
代码验证:
宏定义实现置位
#define CLEAR_BIT_N(x, n)(x & ~(1U<<(n)))
代码验证:
宏定义实现清零
#define SET_BIT_N_M(x, n, m)(x | (((~0U)>>(32-(m-n+1)))<<(n)))
剖析:
(~0U)>>(32-(m-n+1))
5. 之后并左移n位后位与(|)操作
代码验证:
宏定义实现多位置位
#define GET_BITS(x, n, m) ((x & ~(~(0U)<<(m-n+1))<<(n)) >> (n))
代码验证:
获取连续位
联系客服