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

C語言邏輯運算符詳解:&&、||、! 真值表與短路求值

     編輯:C 語言問答

邏輯運算符核心語義

三大運算符

運算符名稱語義優先級
!邏輯非真變假,假變真最高(單目)
&&邏輯與雙真才真,否則假中
||邏輯或雙假才假,否則真低

真值表

A  B  !A  A&&B  A||B
0  0  1    0     0
0  1  1    0     1
1  0  0    0     1
1  1  0    1     1

C語言中:0 代表假,非 0 代表真。運算結果只產生 0 或 1。

短路求值關鍵特性

  • A && B:若 A 為假(0),不計算 B,直接返回 0
  • A || B:若 A 為真(非0),不計算 B,直接返回 1

實戰應用模式

// 1. 防止空指標解引用
if (ptr != NULL && ptr->value > 0) { ... }

// 2. 條件執行副作用函數
if (init() && process() && cleanup()) { success(); }

// 3. 範圍檢查(注意優先級)
if (0 <= x && x < 100) { ... }  // 正確
// if (0 <= x < 100) 錯誤!等價於 (0 <= x) < 100 永真

表達式 a+b>c && b==c 分析

只有當 a+b>c 為真(非0)且 b==c 為真時,整個表達式值為 1。其他三種組合(真假、假真、假假)結果均為 0。這正是「短路與」的語義:前假則不評估後項。

優先級陷阱

// 關係運算符 > == 優先於邏輯運算符
a + b > c && b == c
// 等價於
((a + b) > c) && (b == c)

但邏輯運算符優先級低於賦值運算符 =,故:

int flag = a > b && c < d;  // 正確:邏輯運算先算,結果賦值
// 但
int flag;
flag = a > b && c < d;      // 正確
flag = a > b && c < d;      // 正確
// 若寫成
if (flag = a > b && c < d)  // 警告:賦值在條件中,建議加括號
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved