首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 邏輯運算子優先級驗證:&& 高於 || 的語言規範與短路求值機制

     編輯:程式設計綜合問答

標準規定

C# 語言規格 (ECMA-334) 明確定義運算子優先級:**邏輯 AND (&&) 高於邏輯 OR (||)**。

驗證範例


bool a = false, b = true, c = false;
var r1 = a || b && c; // 解析為 a || (b && c) → false || (true && false) → false
var r2 = (a || b) && c; // 显式括號 → (false || true) && false → true && false → false
// 此例結果相同,需構造差異案例
var r3 = true || false && false; // true || (false && false) → true || false → true
var r4 = (true || false) && false; // true && false → false
// r3=true, r4=false 證明 && 先結合

短路求值與優先級無關

  • 優先級**決定解析樹結構** (哪個運算子先結合運算元)。
  • 短路**決定運行時是否跳過右運算元求值** (左運算元已定結果時)。
  • 兩者正交:a || b && c 解析為 a || (b && c),運行時先算 a,若 a==true 短路,**不再算** b && c;若 a==false 則算 b && c (此處 b 為真才算 c)。

最佳實踐

  • **總是加括號** 明確意圖,避免依賴優先級記憶:(a || b) && c vs a || (b && c)。
  • 靜態分析工具 (Roslyn Analyzer, SonarQube) 會提示缺少括號的複雜邏輯表達式。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved