按位运算符 | 和 &
功能与运算规则
|(按位或运算符):对两个操作数的对应二进制位进行逻辑或运算。只要对应的两个二进制位中有一个为 1,则该位的结果为 1;只有当两个二进制位都为 0 时,结果才为 0。&(按位与运算符):对两个操作数的对应二进制位进行逻辑与运算。只有当对应的两个二进制位都为 1 时,该位的结果才为 1;否则结果为 0。
示例代码
#include <stdio.h>int main() {int a = 5; // 二进制表示: 0101int b = 3; // 二进制表示: 0011int bitwise_or = a | b; // 按位或运算int bitwise_and = a & b; // 按位与运算printf("a | b = %d (二进制: %04d)\n", bitwise_or, bitwise_or);printf("a & b = %d (二进制: %04d)\n", bitwise_and, bitwise_and);return 0;
}
代码解释
a = 5的二进制表示为0101,b = 3的二进制表示为0011。a | b进行按位或运算,结果为0111,即十进制的 7。a & b进行按位与运算,结果为0001,即十进制的 1。
使用场景
|:常用于设置某个变量的特定位。例如,在控制寄存器中,将某一位设置为 1 可以开启某个功能。&:常用于清除某个变量的特定位,或者检查某个变量的特定位是否为 1。例如,检查某个状态寄存器的某一位是否被置位。
逻辑运算符 && 和 ||
功能与运算规则
&&(逻辑与运算符):对两个操作数进行逻辑与运算。只有当两个操作数都为真(非 0)时,结果才为真(1);只要有一个操作数为假(0),结果就为假(0)。并且&&具有短路特性,即如果第一个操作数为假,则不会再计算第二个操作数。||(逻辑或运算符):对两个操作数进行逻辑或运算。只要有一个操作数为真(非 0),结果就为真(1);只有当两个操作数都为假(0)时,结果才为假(0)。||也具有短路特性,即如果第一个操作数为真,则不会再计算第二个操作数。
示例代码
#include <stdio.h>int main() {int x = 5;int y = 0;int logical_and = x && y; // 逻辑与运算int logical_or = x || y; // 逻辑或运算printf("x && y = %d\n", logical_and);printf("x || y = %d\n", logical_or);return 0;
}
代码解释
x = 5为真,y = 0为假。x && y进行逻辑与运算,由于y为假,所以结果为假(0)。x || y进行逻辑或运算,由于x为真,所以结果为真(1)。
使用场景
&&:常用于需要同时满足多个条件的情况,例如在条件判断语句中,只有当多个条件都成立时才执行相应的代码块。||:常用于只需要满足多个条件中的一个即可的情况,例如在条件判断语句中,只要有一个条件成立就执行相应的代码块。
综上所述,按位运算符 | 和 & 主要用于对二进制位进行操作,而逻辑运算符 && 和 || 主要用于逻辑判断。在嵌入式开发中,需要根据具体的需求选择合适的运算符。