首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言基礎

C語言邏輯運算符:&&、||、! 真值表、優先級、短路求值與實戰組合條件

     編輯:C 語言基礎

邏輯運算符概覽

真值判定規則

  • 0 為假,非 0 為真
  • 邏輯運算結果:真 → 1,假 → 0

三大運算符真值表

&& (與):全真才真

5 && 0     → 0 (真與假=假)
(5>0) && (4>2) → 1 && 1 → 1

|| (或):一真即真

10 || 0    → 1 (真或假=真)
(5>0) || (5>8) → 1 || 0 → 1

! (非):真假互換

!0         → 1
!(5>0)     → !1 → 0

短路求值(關鍵特性)

  • &&:左側為假 → 右側不計算(結果必假)
  • ||:左側為真 → 右側不計算(結果必真)

實戰意義

// 避免空指針解引用
if (ptr != NULL && ptr->value > 0) { ... }

// 避免除零
if (b != 0 && a / b > 10) { ... }

優先級(從低到高)

賦值 (=) < &&/|| < 關系運算符 < 算術運算符 < !

等價加括號示例

  • a>b && c>d ≡ (a>b) && (c>d)
  • !b==c || d ≡ ((!b)==c) || (d
  • a+b>c && x+y ≡ ((a+b)>c) && ((x+y)

嵌套邏輯表達式

a > b && b || 9 > c
a || c > d && !p

綜合示例輸出

#include <stdio.h>
int main() {
    char c='k'; int i=1,j=2,k=3; float x=3e+5,y=0.85;
    printf("%d,%d\n", !x*!y, !!!x);           // 0,0
    printf("%d,%d\n", x||i&&j-3, i

運行結果解析

0,0
1,0
0,1
  • !x 和 !y 均為 0(x,y 非零),乘積 0
  • !!!x = !!0 = !1 = 0
  • j-3=-1 非零,i&&-1 = 1,x||1 = 1
  • i 為 1,x 為 0,1&&0 = 0
  • i==5 為 0,0&&... 短路,j=8 不執行
  • x+y 非零,非零||... 短路,結果 1

工程最佳實踐

  1. 利用短路求值保護危險操作(指針、除法、數組越界)
  2. 複雜條件加括號明確優先級,提高可讀性
  3. 避免在邏輯表達式中放副作用操作(除非刻意利用短路)
  4. 條件判斷優先寫最可能短路的表達式在左側
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
運算符名稱目數數學對應結合性
&&邏輯與雙目且 (∧)左結合
||邏輯或雙目或 (∨)左結合
!邏輯非單目非 (¬)右結合