C語言專題:17.邏輯運算與三目運算符(按位邏輯運算、條件運算符)

????????? C語言中的邏輯運算符和三目運算符(條件運算符)是非常常見且基礎的操作符,它們分別用于布爾邏輯運算和簡化條件判斷的表達式。通過合理使用這些運算符,可以使代碼更加簡潔、清晰。本文將重點介紹邏輯運算符、三目運算符和按位邏輯運算。


一、邏輯運算符:用于布爾值判斷

????????邏輯運算符主要用于布爾值操作,它們返回一個邏輯值(01),常用于條件判斷和控制流語句。

1.1 邏輯與 &&(AND)

&& 運算符用于判斷兩個條件是否都為真,只有兩個條件都為真時,結果才為真(1)。

int?a?=?5,?b?=?10;
if?(a?>?0?&&?b?>?0)?{printf("Both?are?positive.\n");
}
  • 用法expr1 && expr2,如果 expr1expr2 都為真(非零),返回 true(1),否則返回 false(0)。

1.2 邏輯或 ||(OR)

|| 運算符用于判斷兩個條件中是否有一個為真,只要有一個條件為真,結果即為真(1)。

int?a?=?-1,?b?=?10;
if?(a?>?0?||?b?>?0)?{printf("At?least?one?is?positive.\n");
}
  • 用法expr1 || expr2,如果 expr1expr2 為真(非零),返回 true(1),否則返回 false(0)。

1.3 邏輯非 !(NOT)

! 運算符用于將一個條件的值反轉,非零值變為 00 變為 1

int?a?=?0;
if?(!a)?{printf("a?is?false.\n");
}
  • 用法!expr,如果 expr 為真(非零),則返回 false(0);如果 expr 為假(0),則返回 true(1)。


二、三目運算符(條件運算符):簡潔的條件判斷

????????三目運算符是一種簡化的條件判斷方式,語法為:

condition???expr1?:?expr2;

????????如果 condition 為真(非零),返回 expr1;否則返回 expr2

2.1 三目運算符的基本用法

int?a?=?10,?b?=?20;
int?max?=?(a?>?b)???a?:?b;
printf("The?larger?number?is?%d\n",?max);

????????在上述例子中,a > b 為條件表達式,如果條件為真,返回 a,否則返回 b。結果是 20,因為 b 較大。

2.2 多重三目運算符

????????三目運算符可以嵌套使用,用于處理復雜的條件判斷。

int?a?=?10,?b?=?20,?c?=?30;
int?max?=?(a?>?b)???((a?>?c)???a?:?c)?:?((b?>?c)???b?:?c);
printf("The?largest?number?is?%d\n",?max);

在這里,max 將返回最大值,三目運算符通過嵌套判斷了三個數中的最大值。

2.3 三目運算符的優缺點

優點缺點
代碼簡潔、易讀可讀性差,尤其是嵌套時
可以在表達式中直接使用調試困難,特別是復雜條件時
  • 當條件邏輯簡單時,三目運算符非常有效;但當條件復雜時,三目運算符的可讀性會降低,建議使用標準的 if-else 語句。


三、按位邏輯運算符:位級操作

????????按位運算符用于對數字的二進制位進行操作,主要用于低層次的硬件編程、加密、數據壓縮等場景。

3.1 按位與 &

????????按位與運算符 & 會將兩個操作數的對應位進行比較,只有當兩個位都為 1 時,結果位才為 1,否則為 0

int?a?=?5,?b?=?3;?//?二進制:a=0101,?b=0011
int?result?=?a?&?b;??//?結果:0001
printf("Result?of?a?&?b:?%d\n",?result);??//?輸出?1
  • 用法expr1 & expr2,只有當 expr1expr2 的某一位都為 1 時,結果才為 1。

3.2 按位或 |

???????按位或運算符 | 會將兩個操作數的對應位進行比較,只有當兩個位都為 0 時,結果位才為 0,否則為 1

int?a?=?5,?b?=?3;?//?二進制:a=0101,?b=0011
int?result?=?a?|?b;??//?結果:0111
printf("Result?of?a?|?b:?%d\n",?result);??//?輸出?7
  • 用法expr1 | expr2,只要 expr1expr2 的某一位有一個為 1,結果就為 1。

3.3 按位異或 ^

????????按位異或運算符 ^ 會將兩個操作數的對應位進行比較,只有當兩位不同(一個為 1,一個為 0)時,結果位才為 1,否則為 0

int?a?=?5,?b?=?3;?//?二進制:a=0101,?b=0011
int?result?=?a?^?b;??//?結果:0110
printf("Result?of?a?^?b:?%d\n",?result);??//?輸出?6
  • 用法expr1 ^ expr2,當 expr1expr2 的某一位不同,結果為 1。

3.4 按位取反 ~

????????按位取反運算符 ~ 會反轉一個數的所有二進制位,即將所有 0 變成 1,所有 1 變成 0

int?a?=?5;?//?二進制:a=0101
int?result?=?~a;??//?結果:1010
printf("Result?of?~a:?%d\n",?result);??//?輸出?-6
  • 用法~expr,對 expr 的每一位進行取反操作。

3.5 按位移位操作 <<>>

????????按位左移 << 和右移 >> 會將一個數的二進制位向左或右移動指定的位數。左移時高位補零,右移時低位補零(對于無符號數)。

int?a?=?5;?//?二進制:a=0101
int?left?=?a?<<?1;??//?左移:1010
int?right?=?a?>>?1;?//?右移:0010
printf("Result?of?a?<<?1:?%d\n",?left);???//?輸出?10
printf("Result?of?a?>>?1:?%d\n",?right);??//?輸出?2
  • 用法
    • 左移:expr << n,將 expr 的二進制位左移 n 位;

    • 右移:expr >> n,將 expr 的二進制位右移 n 位。


四、邏輯與按位運算符對比

運算符作用用途
&&邏輯與用于布爾條件判斷
||邏輯或用于布爾條件判斷
!邏輯非反轉布爾值
&按位與對二進制位執行與操作
|按位或對二進制位執行或操作
^按位異或對二進制位執行異或操作
~按位取反反轉二進制位
<<左移將二進制位左移指定的位數
>>右移將二進制位右移指定的位數

五、注意事項與建議

問題說明
邏輯運算符優先級邏輯運算符 &&||
按位運算符與整數按位運算符常用于整數類型,不適用于浮點數等非整數類型
三目運算符嵌套三目運算符可嵌套使用,但應注意可讀性,避免過于復雜
左右移位操作左右移位時可能引發符號位擴展問題,特別是對負數進行右移時要小心

六、小結一覽表

運算符功能說明示例
&&邏輯與a > 0 && b > 0
||邏輯或a > 0 || b > 0
!邏輯非!a
&按位與a & b
|按位或a | b
^按位異或a ^ b
~按位取反~a
<<左移a << 1
>>右移a >> 1
?:三目運算符(條件運算符)a > b ? a : b

七、結語

  • 邏輯運算符和三目運算符在日常編程中經常使用,能夠簡化條件判斷邏輯;

  • 按位運算符常用于低級操作,特別是在嵌入式編程、硬件控制等領域;

  • 使用這些運算符時,注意優先級、表達式的可讀性,并合理選擇運算符。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87299.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87299.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87299.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【分布式 ID】一文詳解美團 Leaf

文章目錄 1. 前言2. 項目啟動示例 - MYSQL 和 Zookeepr2.1 Leaf-segment 模式2.2 Leaf-snowflake 模式 - 單節點2.3 Leaf-snowflake 模式 - 多節點 3. Leaf-segment 詳細講解4. Leaf-segment 源碼解析4.1 SegmentBuffer 號段緩存4.2 Segment 號段4.3 初始化號段服務 SegmentIDG…

互聯網大廠Java面試實錄:Spring Boot與微服務在電商場景中的應用

互聯網大廠Java面試實錄&#xff1a;Spring Boot與微服務在電商場景中的應用 面試場景 面試官&#xff1a;你好&#xff0c;謝飛機&#xff0c;歡迎參加我們的Java開發崗位面試。首先&#xff0c;能否簡單介紹一下你的技術背景&#xff1f; 謝飛機&#xff1a;嗨&#xff0c…

XILINX Ultrascale+ Kintex系列FPGA的架構

Xilinx&#xff08;現為AMD&#xff09;Kintex UltraScale系列FPGA是基于16nm FinFET工藝的高性能、中等成本的現場可編程門陣列&#xff0c;專為高帶寬、低功耗和成本效益的應用設計&#xff0c;廣泛用于5G通信、數據中心、視頻處理、航空航天等領域。以下詳細介紹Kintex Ultr…

騰訊云實名資質 “待補充后提交” 解決方法

目錄 一、引言二、為什么會出現 “待補充后提交” 狀態三、需要補充的具體材料3.1 營業執照3.2 法人身份證相關3.3 短信管理員資料3.4 合規使用承諾函 四、處理流程詳細步驟4.1 登錄騰訊云控制臺4.2 進入實名資質相關頁面4.3 上傳補充材料4.4 提交審核 五、注意事項5.1 材料規范…

8分鐘講完 Tomcat架構及工作原理

https://www.bilibili.com/video/BV1J3411k7Xc/?spm_id_from333.337.search-card.all.click&vd_source36145f3620bdf21c0f1a843352e603fb JavaWeb開發必看&#xff01;Tomcat架構及工作原理&#xff08;8分鐘&#xff09; 分闡明了Tomcat的工作原理。 一、Tomcat的核心架…

C盤爆滿元兇!WinSxS組件解密

C盤爆滿元兇!WinSxS組件解密 WinSxS是什么?核心功能與重要性目錄為何瘋狂膨脹?安全清理權威指南優先使用微軟官方工具:DISM工具清理效果與性能影響重要風險提示總結C盤爆滿元兇!WinSxS組件解密你是否也遇到過: C盤空間頻頻告急,檢查發現WinSxS文件夾竟獨占數十GB空間?想…

畢業設計(啟智模塊化機器人的組裝與K5的使用

記錄一下 畢業設計的部分筆記 準備清空文件發到csdn做一個紀念0.0 物聯網畢業設計 機器的組裝與K5的使用 基礎文件的學習 首先安裝K5 和文件包中的JLink驅動 并且文件實例里的代碼必須加上x后綴否則 只能用K4 來打開 供電&#xff1a;整個系統都需要電池運轉 build 存放…

從0開始學習R語言--Day37--CMH檢驗

對于有多個特征的數據&#xff0c;我們一般的處理方式是構建特征函數&#xff0c;計算每個特征向量的系數&#xff0c;從而將其影響納入到研究量中&#xff0c;但對于簡單的問題&#xff0c;也這樣做的話未免有點小題大做。這時我們可以考慮用CMH來分析變量在每個特征下的影響&…

搜索選擇DFS還是BFS

1. DFS&#xff08;深度優先搜索&#xff09;&#xff1a;優先進行深度縱向搜索&#xff0c;DFS所需的內存少于BFS所需的內存&#xff0c;利用堆棧實現&#xff0c;適合找最短路徑。 2. BFS&#xff08;廣度優先搜索&#xff09;&#xff1a;優先進行廣度橫向搜索&#xff0c;…

三格電子——電力協議轉換器

Modbus 轉 IE104 網關型號 SG-TCP-IEC104 &#xff0c;是三格電子推出的工業級網關&#xff08;以下簡稱網 關&#xff09;&#xff0c;主要用于 Modbus RTU/TCP/ASCII 數據采集、 DLT645-1997/2007 數據采集&#xff0c;可接多功 能電力儀表、溫控儀、電表等&#xf…

UE5 瞄準偏移(AimOffset)功能詳解

什么是AimOffset? AimOffset(瞄準偏移)是一種特殊的動畫混合空間(類似于 Blend Space),它通過將多個預設姿勢疊加到一個基礎動作上,實現角色根據視角方向進行上下左右的動畫混合。簡單來說,AimOffset 在射擊游戲中常用來處理角色持槍瞄準時的動作,比如抬頭、低頭、左…

在Ubuntu24上安裝ollama

安裝ollama之前&#xff0c;建議檢查顯卡驅動是否安裝完成。如果還未安裝顯卡驅動&#xff0c;建議先安裝顯卡驅動再安裝ollama。 安裝curl sudo apt update sudo apt -y install curl進入ollama的下載網站 https://ollama.com/download/linux 復制安裝腳本&#xff0c;并在…

【Kafka使用方式以及原理】

Kafka生產者發送消息的方式 Kafka生產者發送消息主要通過以下三種方式&#xff1a; 同步發送 生產者發送消息后&#xff0c;會阻塞等待Broker的響應&#xff0c;確認消息是否成功寫入。這種方式可靠性高&#xff0c;但吞吐量較低。代碼示例&#xff1a; ProducerRecord<S…

【ChatTTS】ChatTTS使用體驗

ChatTTS 使用體驗&#xff1a;初始使用真的十分驚艷。可以嘗試官網調用試一試。部署的好處是&#xff0c;遇到好聽的音色可以把參數自動存儲在本地。 苦惱&#xff1a;相同參數生成的音色不一致&#xff0c;需要多次調整&#xff0c;但最終效果非常滿意。 ? GitHub Star數變化…

華為云Flexus+DeepSeek征文| 基于華為云Dify-LLM高可用平臺開發運維故障處理智能體

華為云FlexusDeepSeek征文&#xff5c; 基于華為云Dify-LLM高可用平臺開發運維故障處理智能體 1. 概述2. 創建工作流2.1. 創建開始節點2.2. 創建搜索節點2.3. 創建LLM大模型節點2.4. 創建結束節點 3. 測試工作流4. 應用發布5. 總結 1. 概述 Dify是一款開源的LLM應用開發平臺&am…

vue中scss下載方式與引入方式

1. scss下載 npm install sass-loader --save-devnpm install node-sass --save-dev 2. 在style標簽里面加入lang“scss” 測試下&#xff01;

Day04_C語言IO進程線程

01.思維導圖 02.創建一個分支線程&#xff0c;在主線程中拷貝文件的前一部分&#xff0c;主線程拷貝文件的后一部分 #include <25051head.h> void* callback(void *arg) {off_t size*(off_t*)arg;//打開一個文件讀//打開一個文件寫int fd_r2open("./my.txt",O_…

金牛區數字文創夢工廠:國際數字影像產業園的先行服務

在金牛區數字文創夢工廠的實踐中&#xff0c;先行服務作為創新引擎&#xff0c;為企業提供預啟動階段的全方位支持。其核心理念是通過前置化咨詢和資源整合&#xff0c;降低試錯成本&#xff0c;賦能產業升級。 先行服務的三大核心優勢 通過主動介入項目啟動前環節&#xff0…

使用RSA對網址url欄加密以及二維碼的網址內容加密

JSEncrypt 庫 &#xff1a; - 引入了 jsencrypt/bin/jsencrypt.min - 需要在項目中安裝 jsencrypt 包 npm install jsencrypt import JSEncrypt from jsencrypt/bin/jsencrypt.min// 密鑰對生成 http://web.chacuo.net/netrsakeypairconst publicKey MFwAAQconst privateKe…

如何用 Kafka Manager 實現 Kafka 集群全面監控

1. 前言:為什么需要 Kafka 集群監控? Apache Kafka 是現代大數據架構中不可或缺的組件,廣泛用于日志收集、流處理、消息隊列等場景。隨著 Kafka 集群規模的增長和業務復雜度的提升,對 Kafka 的實時監控變得尤為重要。 1.1 Kafka 在大數據架構中的核心地位 Kafka 被廣泛應…