在嵌入式编程的时候,比如对芯片的某个寄存器的某一位置位或清零,可以使用位掩码
比如 REG是某个8位寄存器
1 /* 将REG第5位置位 */
2 REG |= (1<<5);
3
4 /* 将REG第2和6位置位 */
5 REG |= (1<<2) |(1<<6);
/* 将REG第5位清零 */
REG &= ~(1<<5);
/* 将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就称为位掩码
原文:https://www.cnblogs.com/sypspace/p/12284098.html