单片机学习小组
直播中

李颜

7年用户 1370经验值
私信 关注

请问一下按位与的屏蔽与清零该如何去实现呢

请问一下按位与的屏蔽与清零该如何去实现呢?



回帖(1)

张玉英

2022-2-14 11:30:14
一、按位与(屏蔽、取出、清零)

1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
1 & 1 =1
(1)屏蔽
int a = 0x1234;
a & 0xff00 = 0x1200
取出高八位,屏蔽低八位
(2) 清零
将A寄存器的bit4位清0
A &= ~(1<<4);
二、按位或(设置)

1 | 0 = 1
0 | 1 = 1
1 | 1 = 1
0 | 0 = 0
(1)将A寄存器的bit4位置1
A |= (1<<4);
三、综合练习

假设寄存器a的值是0x34 = 0b0011 0100
现在要让a的bit6~bit4设置为101,
即最后的结果是a = 0b0101 0100 = 0x54
思路:
①先把bit6~bit4置0
②再把bit6和bit4置1
代码如下(示例):

#include


int main(void) {
        unsigned int a = 0x34;        // a = 0011 0100 = 52 = 0x34
        printf("%xn", a);
        /* 置bit6~bit4 为 101 */
       
        //先把bit6~bit4置0
        a &= ~( 7 << 4 );
        printf("%xn", a);                // a = 0000 0100 = 4 = 0x04


        //再把bit6和bit4置1
        a |= ( 5<<4 );                                               
        printf("%xn", a);                // a = 0101 0100 = 84 = 0x54
        return 0;
}
运行结果图:
举报

更多回帖

发帖
×
20
完善资料,
赚取积分