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

C 語言運算子深度剖析:算術、賦值、關係、邏輯與位元運算全攻略

     編輯:關於C

前言

運算子是程式設計的基礎構建塊。C 語言提供豐富的運算子類別,掌握其優先序、結合性與細微行為差異,能寫出高效、無錯誤的程式碼。本文系統整理四大核心運算子類別,並透過實例深度解析易混淆重點。

一、識別字與關鍵字快速回顧

  • 識別字:命名變數、函式、陣列等對象。由字母、數字、底線組成,首字元必為字母或底線,區分大小寫。
  • 關鍵字:C 語言保留的 32 個特殊識別字(如 int, if, while, sizeof 等),不可作變數名使用。

二、運算子分類總覽

類別運算子說明
算術+ - * / % ++ --基本數學運算、自增減
關係> < == >= <= !=比較大小,結果為 0 或 1
邏輯! && ||布林邏輯運算,具短路特性
位元<< >> ~ | ^ &位元層級操作
特殊= ? : , * & sizeof (type) . -> [] ()賦值、三元、逗號、指標、型別轉換等

三、賦值運算子與複合賦值深度解析

10 種複合賦值運算子

+=  -=  *=  /=  %=  <<=  >>=  &=  ^=  |=

x += 1 等價於 x = x + 1,但 x 僅評估一次,對複雜運算式(如 arr[foo()] += 1)效率更高且避免副作用重複執行。

自增/自減運算子前綴 vs 後綴

形式運算式值變數最終值
++n (前綴)自增後的值n+1
n++ (後綴)自增前的值n+1

實例驗證

int X = 5, Y, Z;
Y = X++ + 5;  // Y = 5 + 5 = 10, X 變 6
Z = ++X + 5;  // X 先變 7, Z = 7 + 5 = 12
// 結果:Y=10, X=7, Z=12

四、逗號運算子與逗號運算式

逗號有兩種用途:分隔符(如變數宣告)與運算子。

  • 優先序最低,結合性為左至右。
  • 逗號運算式值 = 最後一個子運算式的值。

實例 1

int a = 2*6, a-4, a+15;  // a = 12 (僅第一項賦值給 a)

實例 2

int a;
a = 3*5, a*4, a+5;  // a = 15
printf("%d", a);    // 輸出 15

實例 3 (巢狀逗號)

int a=2, b=4, c=6, x, y;
y = 3*5, y = ((x=a+b), y=0, y=(b+c));
// 步驟:x=6, y=0, y=10, 最後 y=10
// 結果:y=10, x=6

五、位元運算子實戰

位元 OR (|) 與 XOR (^)

// 輸入 3 和 5
3  = 0011
5  = 0101
3|5 = 0111 = 7

// 輸入 1 和 7
1  = 0001
7  = 0111
1^7 = 0110 = 6

應用場景:旗標操作、權限遮罩、高效乘除 2 的冪次(位移)、校驗碼計算。

六、條件運算子 (三元運算子) ? :

test ? expression1 : expression2

可替代簡單的 if-else,常用於初始化、回傳值、宏定義中。

實例

// JavaScript 風格範例 (C 中無 Date 物件,邏輯相同)
var now = new Date();
var greeting = "Good" + ((now.getHours() > 17) ? " evening." : " day.");

// 等價 if-else
if (now.getHours() > 17) greeting += " evening.";
else greeting += " day.";

七、運算子優先序與結合性速查 (高到低)

  1. () [] -> . (後綴/結構成員)
  2. ++ -- ! ~ (type) * & sizeof (一元,右結合)
  3. * / % (左結合)
  4. + - (左結合)
  5. << >> (左結合)
  6. < <= > >= (左結合)
  7. == != (左結合)
  8. & (位元 AND,左結合)
  9. ^ (位元 XOR,左結合)
  10. | (位元 OR,左結合)
  11. && (邏輯 AND,左結合)
  12. || (邏輯 OR,左結合)
  13. ? : (右結合)
  14. = += -= ... (賦值,右結合)
  15. , (逗號,左結合)

最佳實務:複雜運算式務必加上括號明確分組,不要依賴記憶優先序,提升可讀性並避免隱性 Bug。

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