&与&&,|与||的区别
·
按位运算符 | 和 &
功能与运算规则
|(按位或运算符):对两个操作数的对应二进制位进行逻辑或运算。只要对应的两个二进制位中有一个为 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)。
使用场景
&&:常用于需要同时满足多个条件的情况,例如在条件判断语句中,只有当多个条件都成立时才执行相应的代码块。||:常用于只需要满足多个条件中的一个即可的情况,例如在条件判断语句中,只要有一个条件成立就执行相应的代码块。
综上所述,按位运算符 | 和 & 主要用于对二进制位进行操作,而逻辑运算符 && 和 || 主要用于逻辑判断。在嵌入式开发中,需要根据具体的需求选择合适的运算符。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)