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

一、位与&(位清零用)

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

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

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#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

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#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

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#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

 

posted @   悟透  阅读(136)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示