OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4469|回复: 0

单片机C语言零基础入门05 - 逻辑运算

[复制链接]

9

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2019-8-24
在线时间
7 小时
发表于 2020-12-9 18:02:44 | 显示全部楼层 |阅读模式
硬件家园单片机C语言零基础入门资料汇总链接:
https://mp.weixin.qq.com/s/hMTreNUX_V90461tvALjJA
​
一、逻辑与或非
基础理论:
逻辑与或非,运算对象是布尔值(1或0,真或假),类似于数字电路的与门,或门,非门。与关系运算符配合,一般用于选择语句与循环语句中
1、逻辑与
符号为&&。 参与运算的两个表达式都为真时,结果才为真,否则为假。
例如:
uint8_t  a = 3,b=5;
if((a==3) && (b==5))
{执行};
2、逻辑或
符号为||。 参与运算的两个表达式只要有一个为真,结果就为真;两个表达式都为假时结果才为假。
例如:
uint8_t  a = 4,b=5;
if((a==3) || (b==5))
{执行};
3、逻辑非
符号为!。 参与运算的表达式为真时,结果为假;参与运算的表达式为假时,结果为真。
例如:
bit Flag = 0;
if(!Flag)
{执行};
应用举例:
直播现场编程。

二、按位与或反
按位与或反,运算对象是8位,16位或32位的整型数据,运算数据的每一比特位按逻辑与或非操作。
1、按位与
符号为&。参与运算的两个数据按二进制位进行逻辑与操作。
例如:
uint8_t  a = 0xAA,b=0x55,c;
c = a & b = 0x00;

特殊应用:
清零指定比特位
清零第0位: 运算数据 & 0xFE    //1111 1110      ~(0x01 << 0)
清零第1位: 运算数据 & 0xFD   //1111 1101      ~(0x01 << 1)
清零第2位: 运算数据 & 0xFB   //1111 1011      ~(0x01 << 2)
清零第3位: 运算数据 & 0xF7   //1111 0111      ~(0x01 << 3)
清零第4位: 运算数据 & 0xEF   //1110 1111      ~(0x01 << 4)
清零第5位: 运算数据 & 0xDB  //1101 1111      ~(0x01 << 5)
清零第6位: 运算数据 & 0xB7   //1011 1111      ~(0x01 << 6)
清零第7位: 运算数据 & 0x7F   //0111 1111      ~(0x01 << 7)
2、按位或
符号为|。 参与运算的两个数据按二进制位进行逻辑或操作。
例如:
uint8_t  a = 0xAA,b=0x55,c;
c = a | b = 0xFF;

特殊应用:
置位指定比特位
置位第0位: 运算数据 | 0x01    //0000 0001      (0x01 << 0)
置位第1位: 运算数据 | 0x02   //0000 0010       (0x01 << 1)
置位第2位: 运算数据 | 0x04   //0000 0100       (0x01 << 2)
置位第3位: 运算数据 | 0x08   //0000 1000       (0x01 << 3)
置位第4位: 运算数据 | 0x10   //0001 0000       (0x01 << 4)
置位第5位: 运算数据 | 0x20   //0010 0000       (0x01 << 5)
置位第6位: 运算数据 | 0x40   //0100 0000      (0x01 << 6)
置位第7位: 运算数据 | 0x80   //1000 0000       (0x01 << 7)
3、按位取反
符号为~。 参与运算的数据按二进制位进行逻辑非操作。
例如:
uint8_t  a = 0xAA,b=0x55,c;
c = ~a  = 0x55;
c = ~b  = 0xAA;
应用举例:
直播现场编程。

三、按位异或
基础理论:
符号为^,参与运算的两个数据按二进制位进行“异或”运算。
运算规则:0^0=0;0^1=1;1^0=1;1^1=0;
例如:
uint8_t  a = 0xAA,b=0x55,c;
c = a^b = 0xFF;
uint8_t  a = 0xFF,b=0xFF,c;
c = a^b = 0x00;

特殊应用:
取反指定比特位
取反第0位: 运算数据 ^ 0x01    //0000 0001     (0x01 << 0)
取反第1位: 运算数据 ^ 0x02    //0000 0010     (0x01 << 1)
取反第2位: 运算数据 ^ 0x04    //0000 0100     (0x01 << 2)
取反第3位: 运算数据 ^ 0x08    //0000 1000     (0x01 << 3)
取反第4位: 运算数据 ^ 0x10   //0001 0000      (0x01 << 4)
取反第5位: 运算数据 ^ 0x20   //0010 0000      (0x01 << 5)
取反第6位: 运算数据 ^ 0x40   //0100 0000      (0x01 << 6)
取反第7位: 运算数据 ^ 0x80   //1000 0000      (0x01 << 7)

应用举例:
直播现场编程。

四、左移与右移
基础理论:
符号为<<与>>,运算对象是8位,16位或32位的整型数据, 把数据向左或向右移动若干位。向左移动时,高位溢出,低位补0;向右移动时,低位溢出,高位补0,。
例如:
uint8_t  a = 0xCB,c;
c = a << 5 = 0x40;
c = a >> 3 = 0x19;
应用举例:
直播现场编程。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 06:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表