关系与逻辑运算 —— 寄存器操作的 “入门钥匙”

前言

哈喽大家好,这里是 Hello_Embed 的新一篇学习笔记。在前文中,我们学习了如何用结构体指针操作硬件寄存器,而寄存器的配置往往离不开位运算和条件判断 —— 比如通过逻辑运算精准修改某几位的值,通过关系运算判断硬件状态。这篇笔记将系统梳理关系运算和逻辑运算的规则,以及它们在嵌入式开发中的实用场景,为后续寄存器操作打下基础。

🔍 关系运算:判断条件的真假

关系运算的核心是 “比较两个值的关系”,结果只有两种:真(1)或假(0)。常见的关系运算符如图所示
请添加图片描述

<>为例,我们通过代码理解其逻辑:
先定义int a = 1,比较a > 1时,由于 1 并不大于 1,结果为假(0);比较a > 0时,1 大于 0,结果为真(1)。

#include <stdio.h>
#include <string.h>
int mymain(void)
{int a = 1;int b,c;b = a > 1;  // 条件不成立,b为0printf("b = %d\n\r", b);c = a > 0;  // 条件成立,c为1printf("c = %d\n\r", c);return 0;
}

需要注意 “赋值” 与 “比较” 的区别:

  • a = 1是赋值操作,将 1 赋给变量 a;
  • a == 1是比较操作,判断 a 的值是否等于 1,结果为 0(假)或 1(真)。
    我们通过一道题目测试理解:
int a = 2;
int b, c, d;
b = (a == 2);  // a等于2,条件成立,b=1
c = (a != 2);  // a不等于2?条件不成立,c=0
d = (a >= 2);  // a大于等于2,条件成立,d=1

答案:b=1,c=0,d=1。关系运算的逻辑其实很直接:成立为真(1),不成立为假(0)。

⚙️ 逻辑运算:位操作与条件组合

逻辑运算分为 “按位运算” 和 “逻辑组合运算”,在寄存器配置中高频使用。

按位运算的规则与特性

常见的按位运算符如图所示
请添加图片描述

结合之前指针笔记中的补充
请添加图片描述

我们详细梳理其用法:

  • 按位与(&):两个位都为 1 时结果为 1,否则为 0。
    特性:0 & 任何数 = 01 & 任何数 = 任何数本身。可用于 “清零特定位”。
  • 按位或(|):两个位中有一个为 1 时结果为 1,否则为 0。
    特性:1 | 任何数 = 10 | 任何数 = 任何数本身。可用于 “置 1 特定位”。
  • 按位异或(^):两个位不同时结果为 1,相同时为 0。
    例如:1 ^ 0 = 11 ^ 1 = 00 ^ 0 = 0。可用于 “翻转特定位”。
  • 按位取反(~):0 变 1,1 变 0。常与按位与结合,用于生成 “位掩码”。
  • 左移(<<):将二进制数向左移动指定位数,等价于 “原数 × 2ⁿ”。
    例如:5 << 1(二进制0101 << 1 = 1010),结果为 10(即 5×2¹)。
  • 右移(>>):将二进制数向右移动指定位数,等价于 “原数 ÷ 2ⁿ”(整数除法)。
    例如:5 >> 1(二进制0101 >> 1 = 0010),结果为 2(即 5÷2¹,取整数部分)。
逻辑与(&&)和逻辑或(||)

在按位与(&)和按位或(|)的基础上,我们再学习用于条件组合的逻辑运算符:

  • 逻辑与(&&):判断两个条件是否同时成立,两个条件都为真(非 0)时结果为 1,否则为 0。
  • 逻辑或(||):判断两个条件是否至少有一个成立,只要有一个条件为真(非 0),结果就为 1,否则为 0。
    为了区分容易混淆的&=&&,我们用表格对比:
运算符名称功能操作数类型示例
&=按位与赋值逐位进行与运算并赋值整数类型(如 int)a &= 3 等价于 a = a & 3
&&逻辑与判断两个条件是否同时成立结果为 0 或非 0if (a > 0 && b < 10)

总结

  • &= 是按位运算符,用于对整数的二进制位进行操作。
  • && 是逻辑运算符,用于组合多个条件表达式,返回布尔值0/1。
    同理,|=(按位或赋值)与||(逻辑或)的区别可类比理解:|=用于位操作,||用于条件组合。
实战检验

通过代码测试逻辑运算的结果,思考c1、c2、c3、c4的值:

a = 3;
b = 1;
c1 = (a > 4) && (b < 5);  // 两个条件是否同时成立?
c2 = (a > 4) || (b < 5);  // 两个条件是否至少一个成立?
c3 = !(a > 4) || !(b < 5); // 条件取反后是否至少一个成立?
c4 = !(a > 4) && !(b < 5); // 条件取反后是否同时成立?

答案揭晓:

  • c1 = 0a > 4为假(0),b < 5为真(1),两个条件不同时成立;
  • c2 = 1b < 5为真,至少一个条件成立;
  • c3 = 1!(a > 4)为真(1),!(b < 5)为假(0),至少一个为真;
  • c4 = 0:两个取反后的条件不同时成立。
结尾

这篇笔记系统梳理了关系运算(判断真假)和逻辑运算(位操作与条件组合)的规则,尤其是按位运算在寄存器配置中的实用技巧(清零、置 1、翻转特定位),以及逻辑运算符在条件判断中的应用。这些都是嵌入式开发中操作硬件的基础,比如通过|=置位寄存器的某一位来点亮 LED,通过&&组合多个状态条件来判断系统是否正常。
下一篇,Hello_Embed 将跟着韦东山老师学习if语句。我们下篇见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90700.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Python 将 CSV 文件转换为带格式的 Excel 文件

在日常的数据处理和报表生成工作中&#xff0c;CSV 格式因其简洁性而被广泛采用。但在展示数据时&#xff0c;CSV 文件往往缺乏格式和结构化样式&#xff0c;不利于阅读与分析。相比之下&#xff0c;Excel 格式&#xff08;如 .xlsx&#xff09;不仅支持丰富的样式设置&#xf…

每天读本书-《如何度过每天的24小时》

全景式书籍探索框架 1. “这本书是关于什么的&#xff1f;”——核心定位 一句话核心思想&#xff1a;这本书的核心并非教你如何高效地工作&#xff0c;而是倡导你将工作之外的“自由时间”视为一个“内在的另一天”&#xff0c;并投入智力与热情去经营它&#xff0c;从而获得精…

前端开发 React 状态优化

为了更深入地理解 React 状态管理的性能问题及其解决方案&#xff0c;本文将详细分析 React Context 和 State 的性能问题&#xff0c;配以示例代码说明优化策略。之后&#xff0c;讨论 Redux 作为不可变库的性能问题&#xff0c;并引出 Immer 作为优化解决方案。1. React Stat…

剑指offer第2版:双指针+排序+分治+滑动窗口

一、p129-JZ21使奇数位于偶数前面&#xff08;不考虑相对位置&#xff09;&#xff08;hoare快排双指针&#xff09; 调整数组顺序使奇数位于偶数前面(二)_牛客题霸_牛客网 如果不考虑相对位置的话&#xff0c;那么我们可以模仿hoare快排&#xff0c;使用双指针的思想&#xf…

14-C语言:第14天笔记

C语言&#xff1a;第14天笔记 内容提要 指针 变量指针与指针变量 指针变量做函数参数指针变量指向数组元素 数组指针与指针数组 数组指针回顾 变量指针与指针变量 变量指针&#xff1a;变量的地址值&#xff08;首地址&#xff09;&#xff0c;本质是指针、地址 指针变量&#…

【笔记】活度系数推导

文章目录一、理想溶液的假设与局限性1.1 理想溶液的定义1.2 理想溶液的局限性二、活度与活度系数的引入2.1 活度的定义2.2 修正后的化学势表达式三、活度系数的物理意义四、为什么需要活度系数&#xff1f;4.1 理论需求4.2 扩散理论中的必要性五、活度系数的具体作用5.1 在化学…

基于Docker的GPU版本飞桨PaddleOCR部署深度指南(国内镜像)2025年7月底测试好用:从理论到实践的完整技术方案

还是网上没找到这个基于Docker的GPU版本飞桨PaddleOCR部署教程&#xff0c;于是就有了这一篇。 这个的确坑很多&#xff0c;可能后面变一个版本就不好用了&#xff0c;也是为什么这篇博客不完全粘贴代码的原因。 端口是示例&#xff0c;可以随意改。在人工智能与文档数字化高速…

Python-初学openCV——图像预处理(三)

目录 一、边缘填充 1、边界复制 2、边界反射 3、边界反射101 4、边界常数 5、边界包裹 二、透视变换 三、图像掩膜 1、制作掩膜 2、与运算 3、颜色替换 四、ROI切割 五、图像添加水印 一、边缘填充 我们对图像进行处理后&#xff0c;需要对空出来的区域进行一个填充…

【ESP32设备通信】-W5500与ESP32 /ESP32 S3集成

W5500与ESP32 /ESP32 S3集成 文章目录 W5500与ESP32 /ESP32 S3集成 1、W5500介绍 2、硬件准备与接线 3、代码实现 3.1 以太网设置 3.2 简单HTTP请求 3.3 HTTPS请求 3.4 查询证书 ESP32 凭借其强大的 Wi-Fi 功能,一直是物联网项目的热门选择。ESP32 现在支持带有 SSL 的原生以太…

vue - 使用canvas绘制验证码

封装绘制验证码 verify-code.vue<template><div class"captcha"><canvas ref"canvasRef" :width"width" :height"height" click"refreshCaptcha"></canvas></div> </template><scri…

[10月考试] F

[10月考试] F 题目描述 给定长度为 nnn 的序列 ana_nan​&#xff0c;保证 aia_iai​ 为非负整数。 mmm 次询问&#xff0c;每次给定区间 l,rl,rl,r&#xff0c;求出 al,al1,…,ara_l,a_{l1},\ldots,a_ral​,al1​,…,ar​ 的 mexmexmex。 对于一个序列&#xff0c;定义其 mexm…

收集了全球55个AI写作工具

我们即将推出一整套AI生产力工具矩阵&#xff0c;覆盖内容创作&#xff08;AI写作助手&#xff09;、视觉设计&#xff08;智能图像处理&#xff09;、音视频制作&#xff08;自动转录与编辑&#xff09;及智能编程等多个核心领域。这些解决方案通过先进的机器学习算法&#xf…

Elastic 劳动力的生成式 AI:ElasticGPT 的幕后解析

作者&#xff1a;来自 Elastic Jay Shah, Adhish Thite ElasticGPT — 由 Elastic 提供支持&#xff0c;专为 Elastic 打造 ElasticGPT 是我们基于检索增强生成&#xff08;RAG&#xff09;框架构建的内部生成式 AI &#xff08;GenAI&#xff09;助手。它是使用 Elastic 自有…

CS231n-2017 Assignment1

KNN&#xff1a;这里要求我们完成一个KNN分类器&#xff0c;实现对图片使用KNN算法进行分类标签k_nearest_neighbor.py这里要求我们完成4个接口# X:测试集 # 使用两个循环 def compute_distances_two_loops(self, X):num_test X.shape[0]num_train self.X_train.shape[0]dist…

[python][flask]Flask-Principal 使用详解

Flask-Principal 是一个专为 Flask 应用设计的身份管理和权限控制扩展。它能够帮助开发者轻松实现用户身份验证和权限管理&#xff0c;从而提升应用的安全性和用户体验。该项目最初由 Ali Afshar 开发&#xff0c;现已成为 Pallets 社区生态系统的一部分&#xff0c;由社区共同…

抖音与B站爬虫实战,获取核心数据

本文将深入讲解两大主流短视频平台&#xff08;抖音、B站&#xff09;的爬虫实战技术&#xff0c;提供可直接运行的代码解决方案&#xff0c;并分享突破反爬机制的核心技巧。一、平台特性与爬虫难点对比平台数据价值主要反爬措施推荐抓取方式抖音视频数据、用户画像、热榜签名验…

WSL切换网络模式

WSL切换网络模式问题WSL从NAT改成MIRRORED找到WSL Setting修改配置重启电脑&#xff08;注意不是重启WSL&#xff09;运行pio run验证IP问题 从鱼香ROS买了一个小鱼车&#xff0c;开始学习&#xff0c;然而装环境都要搞死我了。 垃圾VirtualBox我新买的电脑&#xff0c;装个Vi…

[Linux入门] Linux 远程访问及控制全解析:从入门到实战

目录 一、SSH 远程管理&#xff1a;为什么它是远程访问的首选&#xff1f; 1️⃣什么是 SSH&#xff1f; 2️⃣SSH 为什么比传统工具更安全&#xff1f; 3️⃣SSH 的 “三大组成部分” 4️⃣SSH 工作的 “五步流程” 5️⃣常用 SSH 工具 二、实战&#xff1a;构建 SSH 远…

n8n AI资讯聚合与分发自动化教程:从数据获取到微信与Notion集成

引言 n8n简介&#xff1a;自动化工作流利器 n8n是一款功能强大的开源自动化工具&#xff0c;采用独特的“公平代码”&#xff08;Fair-Code&#xff09;许可模式&#xff0c;旨在帮助用户连接各种应用程序和服务&#xff0c;从而实现工作流的自动化。它通过直观的可视化界面&am…

递归查询美国加速-技术演进与行业应用深度解析

在当今数据驱动的时代&#xff0c;递归查询已成为处理层级数据的核心技术&#xff0c;尤其在美国科技领域获得广泛应用。本文将深入解析递归查询在美国加速发展的关键因素&#xff0c;包括技术演进、行业应用场景以及性能优化策略&#xff0c;帮助读者全面理解这一重要技术趋势…