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

C++ 運算子完整指南:算術、關係、邏輯、位元、指派、優先序與結合性

     編輯:C++ 入門

C++ 運算子完整指南:分類、語法、優先序與實務陷阱

運算子指示編譯器執行特定數學/邏輯操作。C++ 內建豐富運算子,分六大類。

運算子分類速覽

類別代表運算子
算術+ - * / % ++ --
關係== != > < >= <=
邏輯&& || !
位元& | ^ ~ << >>
指派= += -= *= /= %= &= ^= |= <<= >>=
雜項sizeof ?: , . -> (cast) & *

重點運算子詳解

算術運算子

支援整數與浮點數。% 僅適用整數。++/-- 分前置(回傳修改後值)與後置(回傳修改前值),前置效能略優(無需建立暫時物件)。

關係運算子

回傳 bool (true/false)。鏈式比較 a < b < c 在 C++ 中不按數學意義,實為 (a < b) < c(bool 轉 int 比較),請改用 a < b && b < c。

邏輯運算子

  • && (AND):短路求值,左側為假則不評估右側。
  • || (OR):短路求值,左側為真則不評估右側。
  • ! (NOT):邏輯反轉。

短路特性常用於防禦性程式設計:if (ptr && ptr->valid())。

位元運算子

作用於整數位元層級。真值表:

pqp&qp|qp^q
00000
01011
10011
11110

常見技巧:

  • x & 1 判斷奇偶
  • x & (x-1) 清除最低位 1
  • 1 << n 產生第 n 位掩碼
  • x | mask 設位、x & ~mask 清位、x ^ mask 翻位

指派運算子

op= 等價 x = x op y,但 x 僅評估一次(對複雜左值如 arr[i++] 有差異)。

雜項運算子

  • sizeof:編譯期取得型別/運算式大小(位元組),非函式。
  • ?::條件運算子,唯一三元運算子,右結合。
  • ,:逗號運算子,依序評估,回傳最右運算式值。
  • ./->:成員存取(物件/指標)。
  • (type):C 風格強制轉型(建議改用 C++ 風格 static_cast 等)。
  • &/*:取址/解參考(指標操作)。

運算子優先序與結合性完整表 (高→低)

優先序運算子結合性
1() [] -> . ++ -- (後置)左→右
2++ -- + - ! ~ (type) * & sizeof (一元)右→左
3* / %左→右
4+ -左→右
5<< >>左→右
6< <= > >=左→右
7== !=左→右
8&左→右
9^左→右
10|左→右
11&&左→右
12||左→右
13?:右→左
14= += -= *= /= %= &= ^= |= <<= >>=右→左
15,左→右

優先序實戰範例

int a=20, b=10, c=15, d=5, e;
e = (a + b) * c / d;      // (30*15)/5 = 90
e = ((a + b) * c) / d;    // 同前,90
e = (a + b) * (c / d);    // 30*(15/5) = 90
e = a + (b * c) / d;      // 20 + (150/5) = 50

括號明確分組 是避免優先序錯誤的最佳實務。

運算子多載 (進階)

C++ 允許為使用者定義型別多載多數運算子(除 .: ?: sizeof :: .* ),語法:

class Complex {
    double re, im;
public:
    Complex operator+(const Complex& rhs) const {
        return Complex(re + rhs.re, im + rhs.im);
    }
};

多載應保持語意直觀(+ 做加法、== 做相等比較),避免濫用導致程式碼難懂。

總結

  • 熟記優先序表,善用括號消除歧義。
  • 善用短路邏輯與位元技巧寫出高效程式碼。
  • 理解前置/後置 ++、指派運算子單次評估等細節。
  • 多載運算子遵循最小驚訝原則,配合 const 正確性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved