首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 邏輯運算子完整解析:&&、||、!、短路求值、位元邏輯與實務技巧

     編輯:關於C#

邏輯運算子對照表

運算子名稱語法短路位元對應
&&邏輯 ANDA && B是&
||邏輯 ORA || B是|
!邏輯 NOT!A-~ (位元補數)
^邏輯 XORA ^ B否^

短路求值機制


// &&: 左運算元為 false 直接回傳 false,不評估右側
bool result = false && ExpensiveMethod(); // ExpensiveMethod() 不會被呼叫

// ||: 左運算元為 true 直接回傳 true
bool result = true || ExpensiveMethod(); // ExpensiveMethod() 不會被呼叫

// 實務防禦性程式碼
if (user != null && user.IsActive) { ... } // 避免 NullReferenceException
if (list != null && list.Count > 0) { ... }

真值表

ABA && BA || BA ^ B!A
FFFFFT
FTFTTT
TFFTTF
TTTTFF

位元邏輯運算子 (&、|、^、~)

  • 不短路:兩側運算元皆會評估
  • 適用於旗標操作、位元遮罩、效能關鍵路徑
  • flags & Mask 檢查旗標、flags | Mask 設定、flags ^ Mask 切換、flags & ~Mask 清除

De Morgan 定律與條件簡化

!(A && B)  ≡  !A || !B
!(A || B)  ≡  !A && !B

// 實務簡化範例
if (!(user == null || !user.IsActive)) 
// 簡化為
if (user != null && user.IsActive)

C# 9+ 模式比對中的邏輯模式


// and / or / not 模式
if (input is not null and (>= 0 and <= 100)) { ... }

switch (value) {
    case > 0 and < 10: ...
    case < 0 or > 100: ...
    case not 0: ...
}

實務最佳實務

  • 預設使用 && || 享受短路保護
  • 旗標枚舉標記 [Flags] 搭配位元運算
  • 複雜條件提取為具名方法/屬性:if (user.CanAccess(resource))
  • 避免在短路運算子右側放置有副作用的呼叫 (除非刻意)
  • 單元測試覆蓋所有分支組合 (MC/DC 準則)

邏輯運算子表
短路求值
De Morgan

本文對應《叩響 C# 之門》第 4.3.2 節邏輯運算子教學內容

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved