与,|与||的区别
按位运算符 |
和 &
功能与运算规则
|
(按位或运算符):对两个操作数的对应二进制位进行逻辑或运算。只要对应的两个二进制位中有一个为 1,则该位的结果为 1;只有当两个二进制位都为 0 时,结果才为 0。&
(按位与运算符):对两个操作数的对应二进制位进行逻辑与运算。只有当对应的两个二进制位都为 1 时,该位的结果才为 1;否则结果为 0。
示例代码
#include <stdio.h>
int main() {
int a = 5; // 二进制表示: 0101
int b = 3; // 二进制表示: 0011
int 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)。
使用场景
&&
:常用于需要同时满足多个条件的情况,例如在条件判断语句中,只有当多个条件都成立时才执行相应的代码块。||
:常用于只需要满足多个条件中的一个即可的情况,例如在条件判断语句中,只要有一个条件成立就执行相应的代码块。
综上所述,按位运算符 |
和 &
主要用于对二进制位进行操作,而逻辑运算符 &&
和 ||
主要用于逻辑判断。在嵌入式开发中,需要根据具体的需求选择合适的运算符。