当前位置: 首页 > article >正文

与,|与||的区别

按位运算符 | 和 &

功能与运算规则
  • |(按位或运算符):对两个操作数的对应二进制位进行逻辑或运算。只要对应的两个二进制位中有一个为 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 的二进制表示为 0101b = 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)。
使用场景
  • &&:常用于需要同时满足多个条件的情况,例如在条件判断语句中,只有当多个条件都成立时才执行相应的代码块。
  • ||:常用于只需要满足多个条件中的一个即可的情况,例如在条件判断语句中,只要有一个条件成立就执行相应的代码块。

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


http://www.kler.cn/a/531970.html

相关文章:

  • pytorch图神经网络处理图结构数据
  • 我们信仰AI?从神明到人工智能——信任的进化
  • 嵌入式硬件篇---HAL库内外部时钟主频锁相环分频器
  • 巧妙利用数据结构优化部门查询
  • Med-R2:基于循证医学的检索推理框架:提升大语言模型医疗问答能力的新方法
  • 2025年1月个人工作生活总结
  • python leetcode 笔记
  • 一些硬件知识【20250/2/3】
  • html中的表格属性以及合并操作
  • DeepSeek-R1-Distill-Qwen-1.5B 本地部署报错解决
  • MySQL(InnoDB统计信息)
  • Unix 进程的启动方式及经典和现代做法(中英双语)
  • 单调队列 滑动窗口(题目分析+C++完整代码)
  • 【Deep Seek本地化部署】模型实测:规划求解python代码
  • 初始Linux(7):认识进程(下)
  • 基于SpringBoot养老院平台系统功能实现一
  • c语言练习【实现终端功能、dup2实现文件拷贝、read write文件加载到链表】
  • IntelliJ IDEA远程开发代理远程服务器端口(免费内网穿透)
  • 图算法概述
  • ZeRO(Zero Redundancy Optimizer) 技术
  • 《Linux服务与安全管理》| 数据库服务器安装和配置
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.18 对象数组:在NumPy中存储Python对象
  • 记录 | 基于MaxKB的文字生成视频
  • Leetcode680:验证回文串 II
  • 物业管理平台系统为社区管理带来数字化转型与服务创新新机遇
  • 高阶开发基础——快速入门C++并发编程5 信号量的使用