關系與邏輯運算 —— 寄存器操作的 “入門鑰匙”

前言

哈嘍大家好,這里是 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×21)。
  • 右移(>>):將二進制數向右移動指定位數,等價于 “原數 ÷ 2?”(整數除法)。
    例如:5 >> 1(二進制0101 >> 1 = 0010),結果為 2(即 5÷21,取整數部分)。
邏輯與(&&)和邏輯或(||)

在按位與(&)和按位或(|)的基礎上,我們再學習用于條件組合的邏輯運算符:

  • 邏輯與(&&):判斷兩個條件是否同時成立,兩個條件都為真(非 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
英文地址,請注明出處:http://en.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;幫助讀者全面理解這一重要技術趨勢…