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

C語言關係運算子優先級與邏輯解析:==、!=、<、<=、>、>=

     編輯:C 語言問答

優先級與結合性

運算子優先級結合性說明
< <= > >=第 6 級(較高)左結合關係運算子
== !=第 7 級(略低於關係)左結合相等性運算子
&&第 11 級左結合邏輯 AND
||第 12 級左結合邏輯 OR
?:第 13 級右結合條件運算子
= += 等第 14 級(最低)右結合賦值運算子

結論:< <= > >= 優先級 高於 == !=。同組內優先級相同,左結合。

運算子語意詳細解析

運算子名稱真值條件範例結果
==等於左運算元等於右運算元5 == 51 (真)
!=不等於左運算元不等於右運算元5 != 31 (真)
<小於左運算元小於右運算元3 < 51 (真)
<=小於或等於左運算元小於或等於右運算元5 <= 51 (真)
>大於左運算元大於右運算元5 > 31 (真)
>=大於或等於左運算元大於或等於右運算元5 >= 51 (真)

關鍵概念:C 語言的「真」與「假」

  • 零 (0) 為假,非零為真。
  • 關係/相等/邏輯運算子的結果型別為 int,值只能是 1 (真) 或 0 (假)。
  • if (x == 5) 中,x == 5 的值是 1 或 0,if 判斷該值是否非零。

常見誤區與陷阱

誤區代碼問題正確理解
if (a = 5)賦值而非比較,值為 5 (真),永遠執行比較用 ==,編譯器 -Wall 會警告
if (0 < x < 10)左結合:(0 < x) < 10,0 結果 0/1,永遠 < 10 為真寫 if (0 < x && x < 10)
if (x == 1 || 2)解析為 (x == 1) || 2,2 為真,永遠執行寫 if (x == 1 || x == 2)
浮點數直接 ==精度誤差導致邏輯錯誤用 fabs(a-b) < EPSILON
sizeof(x) == 4 判斷 int不可移植,int 可能 2/4/8 位元組用 sizeof(int) 或 <stdint.h> 固定寬度型別

運算子組合實例


// 範例:判斷年份是否為閏年
// 規則:能被 4 整除但不能被 100 整除,或能被 400 整除
int is_leap(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
    // 優先級:% > == != > && > ||,無需額外括號
}

// 範例:分數等級判斷
char grade(int score) {
    if (score >= 90) return 'A';
    else if (score >= 80) return 'B';
    else if (score >= 70) return 'C';
    else if (score >= 60) return 'D';
    else return 'F';
    // 利用短路求值與優先級,依序判斷
}

標準庫替代:<stdbool.h> (C99)


#include <stdbool.h>

bool is_equal(int a, int b) {
    return a == b;  // 返回 true/false,可讀性更高
}

if (is_equal(x, y)) { ... }  // 直接用 bool 變數

雖然底層仍是 int,但 bool、true、false 關鍵字讓意圖更清晰。

總結

  • < <= > >= 優先級高於 == !=,同組左結合。
  • == 判斷「等於」,!= 判斷「不等於」,結果為 int (1/0)。
  • C 語言以 零為假、非零為真,運算子結果嚴格為 1/0。
  • 避開經典陷阱:= vs ==、鏈式比較、浮點數相等、短路求值順序。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved