打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C语言学习篇(9)位操作(三)

https://m.toutiao.com/is/Jben8H9/ 


在很多开源项目中都会使用宏定义的方式实现一些特定的位运算,以及在一些面试过程中,都会涉及分析其工作原理,因此这节来拓展下宏定义实现位运算的知识。

宏定义实现第n位置位

#define   SET_BIT_N(x, n)   (x | (1U<<(n)))

代码验证:

宏定义实现置位

宏定义实现第n位清零

#define CLEAR_BIT_N(x, n)(x & ~(1U<<(n)))

代码验证:

宏定义实现清零

难度加大: 宏定义实现第n位到第m位置位

#define SET_BIT_N_M(x, n, m)(x | (((~0U)>>(32-(m-n+1)))<<(n)))

剖析:

  1. 如果n=2, m=5,则就是把bit2~bit5置位
  2. 因此我们需要一个算式来得到(m-n+1)个1:
  3. 算式实现: 先得到32位1: ~0U
  4. 将第3)得到的数,右移(32-(m-n+1))位就得到了低(m-n+1)全为1,其他高位为0的数
                                          (~0U)>>(32-(m-n+1))

5. 之后并左移n位后位与(|)操作

代码验证:

宏定义实现多位置位

截取变量的部分连续位

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

代码验证:

获取连续位

总结

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Imx GPIO口功能定义
LZW压缩类定义和构思
C语言中续行符“\”说明 【转载
C 面试题之宏定义面试题
带参数宏与函数、内联函数比较(转收藏)
define宏定义和const常量定义之间的区别
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服