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

C++ 運算符大全:從賦值、算術到位運算、優先級的完整指南

     編輯:關於C語言

核心運算符分類速查

類別運算符說明
賦值=賦值 (右→左,lvalue = rvalue)
+= -= *= /= %= &= |= ^= <<= >>=複合賦值
算術+ - * / %加減乘除模 (整數/浮點)
++ --前綴/後綴 自增自減
關係== != > < >= <=返回 bool (true/false)
邏輯! && ||非、與、或 (短路求值)
條件? :三目運算符 cond ? expr1 : expr2
逗號,順序求值,取最右值
位運算& | ^ ~與、或、異或、取反
<< >>左移、右移
類型轉換(type) expr / type(expr)C 風格 / 函數式轉型
sizeofsizeof(type) / sizeof expr編譯期獲取字節數
指針/成員* & . -> .* ->*解引用、取址、成員訪問、成員指針
作用域::作用域解析 (命名空間、類成員、全局)
類型識別typeidRTTI 類型信息
動態轉型dynamic_cast static_cast reinterpret_cast const_castC++ 四大轉型運算符
內存管理new delete new[] delete[]動態分配/釋放

重點運算符深度講解

1. 賦值 = — 右值賦予左值

  • a = b 將 b 的值拷貝給 a,b 後續改變不影響 a。
  • 鏈式賦值:a = b = c = 5; 等價 c=5; b=c; a=b; (右結合)。
  • 賦值表達式有值:a = 2 + (b = 5); // a=7, b=5。

2. 算術運算符

  • 整數除法截斷向零:5/2=2, -5/2=-2。
  • % 僅用於整數,符號跟隨被除數 (C++11 規定)。
  • 字符參與運算自動提升為 int (ASCII 碼)。

3. 自增自減:前綴 vs 後綴

int a = 5, b;
b = ++a; // a=6, b=6 (先增後用)
b = a++; // a=6, b=5 (先用後增)

// 現代編譯器優化下三者機器碼通常相同
a++; ++a; a+=1; a=a+1;
// 但語義不同,表達式中必須正確選擇

4. 關係與邏輯運算 — 返回 bool

  • C++ 標準:關係/邏輯運算結果為 bool (true/false)。
  • 舊編譯器可能返回 int (0/1),現代代碼應假設 bool。
  • 短路求值:&& 左假不算右;|| 左真不算右。

5. 條件運算符 ? :

int max = (a > b) ? a : b;
std::cout << (score >= 60 ? "Pass" : "Fail");

可替代簡單 if-else,但嵌套超過兩層可讀性急劇下降。

6. 逗號運算符 ,

int a = (b = 3, b + 2); // a=5, b=3
// 常用於 for 循環多變量控制
for (int i=0, j=10; i

7. 位運算符 — 僅適用整型/字符型

符號汇編對應說明
&AND按位與
|OR按位或
^XOR按位異或
~NOT按位取反 (補碼下 ~x = -x-1)
<<SHL左移 (低位補 0,等價 ×2^n)
>>SHR右移 (無符號邏輯移位補 0,有符號算術移位補符號位)

區別: & (位與) vs && (邏輯與)。7 & 8 = 0,7 && 8 = true。

8. 類型轉換運算符

float f = 3.14;
int i = (int)f;   // C 風格
int j = int(f);   // 函數式 (C++ 風格)
// 進階:static_cast<int>(f) 等四大轉型 (後續章節講解)

9. sizeof — 編譯期常量

  • sizeof(char) == 1 (定義)。
  • sizeof(int) 通常 4 (32/64 位系統),sizeof(double) == 8。
  • 參數可為類型 (需括號) 或表達式 (不需括號)。
  • 結果為 size_t (無符號整數)。

C++ 運算符優先級與結合性 (高 → 低)

級別運算符說明結合性
1::作用域解析左→右
2() [] . -> ++ -- typeid const_cast dynamic_cast reinterpret_cast static_cast後綴/類型相關左→右
3++ -- ~ ! sizeof new delete + - & *一元 (前綴自增減、取反、邏輯非、sizeof、new/delete、正負號、取址、解引用)右→左
4(type)C 風格強制轉型右→左
5.* ->*成員指針左→右
6* / %乘除模左→右
7+ -加減左→右
8<< >>移位左→右
9< <= > >=關係左→右
10== !=相等左→右
11&按位與左→右
12^按位異或左→右
13|按位或左→右
14&&邏輯與左→右
15||邏輯或左→右
16? :條件右→左
17= += -= *= /= %= &= ^= |= <<= >>=賦值/複合賦值右→左
18,逗號左→右

最佳實踐

  1. 不確定優先級 → 加括號:a = 5 + (7 % 2); 而非靠記憶。
  2. 避免在同一表達式多次修改同一變量:i = i++ + ++i; 是 UB。
  3. 浮點數比較用 epsilon:fabs(a-b) < 1e-9。
  4. 優先用 C++ 風格轉型 (static_cast 等) 而非 C 風格 (type),可被編譯器檢查、搜索更易。
  5. 位運算僅用於無符號整型,避免符號位右移移植性問題。
  6. 短路求值用於防空指針:if (p && p->valid())。

運算符是 C++ 表達式的積木。熟練掌握其語義、優先級、類型轉換規則與副作用,是寫出正確、高效、可維護代碼的基石。

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