C语言位掩码

C语言位掩码

    在嵌入式编程的时候,比如对芯片的某个寄存器的某一位置位或清零,可以使用位掩码。

    比如 REG是某个8位寄存器

1  /* 将REG第5位置位 */                      REG  |= (1<<5);
2  /* 将REG第2和6位置位 */                REG  |= (1<<2) |(1<<6); 

3 /* 将REG第5位清零 */                      REG &= ~(1<<5);

4 /* 将REG第2和6位清零 */                 REG &= ~( (1<<2) | (1<<6) ) ;

其实上面的 1<< 5 就是0b000100000,,1<< 2 就是0b00000100 ,1<< 6 就是0b01000000

从而进一步使用宏定义

#define BIT2_MASK 0b00000100
#define BIT5_MASK 0b00100000
#define BIT6_MASK 0b01000000

从而程序变为

/* 将REG第5位置位 */             REG  |= BIT5_MASK; 

 /* 将REG第2和6位置位,两段代码效果一样 */
REG  |= BIT2_MASK | BIT6_MASK;
REG  |= BIT2_MASK + BIT6_MASK; 

 /* 将REG第5位清零 */                REG  &=  ~BIT5_MASK; 

/* 将REG第2和6位清零,两段代码效果一样*/
REG &= ~(BIT2_MASK | BIT6_MASK) ;
REG &= ~(BIT2_MASK + BIT6_MASK) ;

其中的BITx_MASK就称为位掩码

掩码还可以用于:

1.取出一个变量/寄存器中特定位数的值(高位/低位)

/* 一般写法 */
/* 取出变量的高位和低位 */

uchar_var = 0x34;
uchar_var >>= 4;/* 取出变量的高位 */
uchar_var <<= 4;/* 取出变量的低位 */

/* 使用位掩码 */
/* 取出变量的高位和低位 */
#define H4_MASK 0b11110000
#define L4_MASK 0b00001111 

2.作为判断条件

#define BIT3_MASK 0b00001000
#define BIT2_MASK 0b00000100
#define BIT1_MASK 0b00000010

If( (uchar_var & BIT3_MASK) != 0 )/* bit3是否置位*/
{
    …
}

If( (uchar_var & BIT2_MASK) == 0 )/*  bit2是否清零*/
{
    …
}

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值