運算子教學
Operators in C/C++ & General Programming
運算子是什麼? 核心概念

「運算子(operator)」就像數學與程式裡的「動作符號」,用來對資料做計算、比較、連接或邏輯判斷。

在程式語言(這裡以 C/C++ 為例)常見的運算子大致分成:

  • 算術運算子:+ - * / %
  • 關係運算子:== != > < >= <=
  • 邏輯運算子:&& || !
  • 指定(賦值)運算子:= += -= *= /= %=
  • 遞增 / 遞減運算子:++ --
  • 位元運算子:& | ^ ~ << >>
  • 條件(? :)與其他特殊運算子

想像變數是盒子,運算子就是對盒子裡數值做動作的工具:加、減、比較、判斷。

一、算術運算子(Arithmetic) 最常見的計算

算術運算子主要用在數值計算,行為和數學很像:

運算子 名稱 範例 說明
+ 加法 a + b a 與 b 相加
- 減法 a - b a 減去 b
* 乘法 a * b a 乘以 b
/ 除法 a / b 整數除法時,小數部分會被捨去
% 取餘數 a % b 得到 a ÷ b 的「餘數」
範例:計算整數與餘數(C++ 設計風格)
// 宣告兩個整數
int a = 17;
int b = 5;

// 基本運算
int sum  = a + b;   // 22
int diff = a - b;   // 12
int prod = a * b;   // 85
int quot = a / b;   // 3    (整數除法)
int rem  = a % b;   // 2    (餘數)

科學計算常利用 % 來做「模運算(mod)」:例如判斷「是否為偶數」可用 n % 2 == 0

二、關係運算子(Relational) 比較大小與相等

關係運算子會產生「布林值(bool)」結果:truefalse

運算子 意義 範例(假設 a=5, b=8) 結果
== 是否相等 a == b false
!= 是否不相等 a != b true
> 大於 a > b false
< 小於 a < b true
>= 大於等於 a >= 5 true
<= 小於等於 b <= 8 true
範例:使用關係運算子做條件判斷
int score = 78;
bool pass   = (score >= 60);  // 是否及格?
bool full   = (score == 100); // 是否滿分?
bool failed = (score < 60);   // 是否不及格?

很容易犯的錯:
「=」是指定,「==」才是比較相等。在條件判斷裡要用 ==

三、邏輯運算子(Logical) 組合多個條件

邏輯運算子用來把多個「條件式」組合起來。

運算子 名稱 意義 範例(假設 A、B 為條件)
&& AND(且) 兩個都為真,結果才為真 A && B
|| OR(或) 至少一個為真,結果就為真 A || B
! NOT(非) 把真變假,把假變真 !A
範例:同時檢查「年齡」與「成績」
int age   = 17;
int score = 85;

// 同時滿足:年齡 >= 16 且 成績 >= 80
bool goodStudent = (age >= 16) && (score >= 80);

// 只要「年齡 >= 18」或「成績 = 100」其中一個成立
bool special = (age >= 18) || (score == 100);

// 不及格:score < 60
bool failed = !(score >= 60);

在實作「複雜條件」時,善用括號 可以讓邏輯更清楚,也避免優先順序搞混。

四、指定與複合指定運算子(Assignment) 更新變數的值

指定運算子負責把右邊的值「放到左邊的變數」裡。

運算子 意義 說明
= 指定 a = 5; 表示把 5 放進 a
+= 加後指定 a += 3; 等同 a = a + 3;
-= 減後指定 a -= 2; 等同 a = a - 2;
*= 乘後指定 a *= 4; 等同 a = a * 4;
/= 除後指定 a /= 2; 等同 a = a / 2;
%= 取餘後指定 a %= 10; 等同 a = a % 10;
範例:用複合指定做迴圈累加
int sum = 0;
for (int i = 1; i <= 10; i++) {
    sum += i;   // 等同 sum = sum + i;
}

在演算法或競賽題中,複合指定 能讓程式更短、更好讀,也比較不容易打錯。

五、遞增 / 遞減、條件運算子與位元 進階但常用

1. 遞增 / 遞減運算子 ++--

用來讓變數加一或減一。

寫法 名稱 意義(以 int a = 5; 為例)
a++ 後置遞增 先使用 a 的值,再把 a 加一
++a 前置遞增 先把 a 加一,再使用 a 的值
a-- 後置遞減 先使用 a 的值,再把 a 減一
--a 前置遞減 先把 a 減一,再使用 a 的值
範例:前置 vs 後置
int a = 5;
int x = a++;  // x = 5, a 變成 6
int y = ++a;  // a 先加 1 變 7,再指定給 y,所以 y = 7

2. 條件運算子(三元運算子) ? :

可以把簡單的 if-else 寫在一行:

int score = 73;
string result = (score >= 60) ? "pass" : "fail";
// 若 score >= 60,result 為 "pass",否則為 "fail"

3. 簡介位元運算子(Bitwise)

位元運算子直接對「二進位位元」操作,在競賽與嵌入式系統常用。

運算子 名稱 簡單說明(以二進位為例)
& AND 兩位元都為 1,結果才為 1
| OR 只要有一個為 1,結果為 1
^ XOR 兩位元不同,結果為 1
~ NOT 把 0 變 1,1 變 0(依型別長度取反)
<< 左移 整體向左移位,相當於乘上 2 的次方
>> 右移 整體向右移位,類似除以 2 的次方
範例:利用位元運算設定 / 檢查旗標
unsigned int FLAG_A = 1 << 0; // 0001
unsigned int FLAG_B = 1 << 1; // 0010

unsigned int state = 0;
state |= FLAG_A;              // 開啟 A
bool hasA = (state & FLAG_A); // 檢查 A 是否為 1

位元運算是許多「科學計算、競賽最佳化、嵌入式控制」的基礎,可以先理解概念,之後再搭配實作題目練習。