&与&&,|与||的区别

按位运算符 | 和 &

功能与运算规则
  • |(按位或运算符):对两个操作数的对应二进制位进行逻辑或运算。只要对应的两个二进制位中有一个为 1,则该位的结果为 1;只有当两个二进制位都为 0 时,结果才为 0。
  • &(按位与运算符):对两个操作数的对应二进制位进行逻辑与运算。只有当对应的两个二进制位都为 1 时,该位的结果才为 1;否则结果为 0。
示例代码
#include 

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 的二进制表示为 0101b = 3 的二进制表示为 0011
  • a | b 进行按位或运算,结果为 0111,即十进制的 7。
  • a & b 进行按位与运算,结果为 0001,即十进制的 1。
使用场景
  • |:常用于设置某个变量的特定位。例如,在控制寄存器中,将某一位设置为 1 可以开启某个功能。
  • &:常用于清除某个变量的特定位,或者检查某个变量的特定位是否为 1。例如,检查某个状态寄存器的某一位是否被置位。

逻辑运算符 && 和 ||

功能与运算规则
  • &&(逻辑与运算符):对两个操作数进行逻辑与运算。只有当两个操作数都为真(非 0)时,结果才为真(1);只要有一个操作数为假(0),结果就为假(0)。并且 && 具有短路特性,即如果第一个操作数为假,则不会再计算第二个操作数。
  • ||(逻辑或运算符):对两个操作数进行逻辑或运算。只要有一个操作数为真(非 0),结果就为真(1);只有当两个操作数都为假(0)时,结果才为假(0)。|| 也具有短路特性,即如果第一个操作数为真,则不会再计算第二个操作数。
示例代码
#include 

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)。
使用场景
  • &&:常用于需要同时满足多个条件的情况,例如在条件判断语句中,只有当多个条件都成立时才执行相应的代码块。
  • ||:常用于只需要满足多个条件中的一个即可的情况,例如在条件判断语句中,只要有一个条件成立就执行相应的代码块。

综上所述,按位运算符 | 和 & 主要用于对二进制位进行操作,而逻辑运算符 && 和 || 主要用于逻辑判断。在嵌入式开发中,需要根据具体的需求选择合适的运算符。

你可能感兴趣的:(算法)