查看:
2812
|
回复:
1
|
单片机C语言零基础入门05 - 逻辑运算
|
JackMCU
32
主题
47
回复 |
发表于2020-12-09 18:01:23
|
只看该作者
1#
电梯直达
硬件家园单片机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; 应用举例: 直播现场编程。 如果你只做能力范围之内的事情,就永远没法进步。
|
蜗牛不吃路边草
0
主题
13
回复 |
发表于2022-01-18 14:00:18
|
只看该作者
2#
c = a << 5 = 0x40; 应该是60哦
|
|