查看: 4025|回复: 3

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

[复制链接]
  • TA的每日心情
    开心
    2020-1-8 09:17
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2020-12-9 18:04:43 | 显示全部楼层 |阅读模式
    分享到:
    硬件家园单片机C语言零基础入门资料汇总链接:
    游客,如果您要查看本帖隐藏内容请回复

    一、逻辑与或非
    基础理论:
    逻辑与或非,运算对象是布尔值(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;
    应用举例:
    直播现场编程。


    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 14:20
  • 签到天数: 1749 天

    连续签到: 22 天

    [LV.Master]伴坛终老

    发表于 2022-7-21 12:24:56 | 显示全部楼层
    谢谢楼主分享  学习一下基础教程
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 01:32 , Processed in 0.140631 second(s), 21 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.