寄存器修改指定位不影响其他位, 位与&、位或|、位异或^

发布时间 2023-03-23 20:35:47作者: 悟透

一、位与&(位清零用)

位与特点:任何数(0或1),和1,位与无变化;和0,位与变成0

真值表: 1&1=1    0&0=0    1&0=0    0&1=0

代码

#include <stdio.h>

int main(void)
{
    unsigned int a = 0xAAAAAAAA;
    unsigned int b = 0xFFFF00FF;
    unsigned int c;

    c = a & b;
    printf("a = 0x%x\n", a);
    printf("b = 0x%x\n", b);
    //printf("a & b = 0x%x\n", a & b);  // 直接在 printf 里写表达式获取结果
    printf("a & b = 0x%x\n", c);
}

效果

 

 

 

 

二、位或|(位置1用)

位与特点任何数(0或1),和1,位或变1;和0,位或无变化

真值表: 1 | 1=1    0 | 0=0    1 | 0=1     0 | 1=1

代码

#include <stdio.h>

int main(void)
{
    unsigned int a = 0xAAAAAAAA;
    unsigned int b = 0xFFFF00FF;
    unsigned int c;

    c = a | b;
    printf("a = 0x%x\n", a);
    printf("b = 0x%x\n", b);
    //printf("a | b = 0x%x\n", a | b);   // 直接在 printf 里写表达式获取结果
    printf("a | b = 0x%x\n", c); 
}

效果

 

 

 

 

三、位异或^(位取反用)

位与特点任何数(0或1),和1,位异或会取反;和0,位异或无变化

真值表: 1^1=0  0^0=0    1^0=1   0^1=1

代码

#include <stdio.h>

int main(void)
{
    unsigned int a = 0xAAAAAAAA;
    unsigned int b = 0xFFFF00FF;
    unsigned int c;

    c = a ^ b;
    printf("a = 0x%x\n", a);
    printf("b = 0x%x\n", b);
    //printf("a ^ b = 0x%x\n", a ^ b);   // 直接在 printf 里写表达式获取结果
    printf("a ^ b = 0x%x\n", c);
}

效果

 

 

 

 

 

 

 

 

参考:

朱有鹏-嵌入式软件工程师完全学习路线图专题\4.C语言高级专题精讲视频课程套餐\4.2.C语言位操作\4.2.2.位与位或位异或在操作寄存器时的特殊作用.mp4