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

C 語言邏輯運算短路求值:為何 b 保持原值 4

     編輯:程式設計綜合問答

程式碼

int a = -1, b = 4;
if ((++a < 0) && !(b-- <= 0))
    printf("True");
else
    printf("False");
printf("a=%d, b=%d", a, b); // 輸出 a=0, b=4

逐步執行分析

  1. ++a:a 從 -1 變為 0。
  2. (++a < 0) → (0 < 0) → false。
  3. && 為短路運算子:左運算元為 false 時,右運算元完全不會執行。
  4. 因此 !(b-- <= 0) 不求值,b-- 不執行,b 維持 4。
  5. 整體條件為 false,進入 else 列印 "False"。

關鍵概念

  • 短路求值:&& 左假則右不算;|| 左真則右不算。
  • 副作用順序:只有真正求值的運算元才會產生副作用(如 ++、--、函式呼叫)。
  • 前綴 vs 後綴:++a 先增後用;b-- 先用後減(但此處根本不執行)。

驗證技巧

在 IDE 斷點觀察 a、b 變化,或改寫為獨立語句:

bool left = (++a < 0);
bool right = !(b-- <= 0); // 只有 left 為 true 時才會執行
if (left && right) ...

總結

條件 (++a < 0) 為假,導致邏輯與短路,b-- 不執行,故 b 保持初值 4。

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