運算符號

C/C++ 運算符號 (C/C++ Operators)

運算符號(Operators)是 C/C++ 語言的核心組成部分,它們告訴編譯器要執行特定的數學或邏輯操作。本教材將 C/C++ 中主要的運算符號分類並詳細說明。


一、算術運算符號 (Arithmetic Operators)

用於執行基本的數學運算。

符號 名稱 範例 (假設 a = 10, b = 3) 結果 說明
+ 加法 (Addition) a + b 13 計算兩個操作數的和。
- 減法 (Subtraction) a - b 7 計算兩個操作數的差。
* 乘法 (Multiplication) a * b 30 計算兩個操作數的積。
/ 除法 (Division) a / b 3 (整數除法) 計算兩個操作數的商。如果操作數皆為整數,則結果為整數。
% 餘數 (Modulo) a % b 1 計算整數除法的餘數。只能用於整數型別
++ 遞增 (Increment) a++++a a 變為 11 將操作數的值增加 1。
-- 遞減 (Decrement) a----a a 變為 9 將操作數的值減少 1。

遞增/遞減運算符號的區別

遞增與遞減運算符號只有在多運算符號的運算式中有前置與後置的區別。

前置 (Prefix) 形式:先改變變數的值,再將新值用於運算式中的其它運算。

後置 (Postfix) 形式:先將變數的原值用於運算式中的其它運算,再改變變數的值。

程式碼 a 的初始值 b 的值 a 的最終值 說明
b = ++a; 5 6 6 先將 a 增加到 6,然後將 6 指派給 b
b = a++; 5 5 6 先將 a 的原值 5 指派給 b,然後將 a 增加到 6。


二、指派運算符號 (Assignment Operators)

用於將右側的值(或運算式結果)指派給左側的變數。

符號 範例 等同於 說明
= a = 5
右值指派:將 5 指派給 a
+= a += 2 a = a + 2 和指派:將 a 加上 2 的和指派給 a
-= a -= 2 a = a - 2 差指派。
*= a *= 2 a = a * 2 積指派。
/= a /= 2 a = a / 2 商指派。
%= a %= 2 a = a % 2 餘數指派。

三、關係運算符號 (Relational Operators)

用於比較兩個值,結果為布林值 (Boolean):true (1) 或 false (0)。

符號 名稱 範例 (假設 a = 10, b = 3) 結果 說明
== 等於 (Equal to) a == b false 檢查左值與右值是否相等。
!= 不等於 (Not equal to) a != b true 檢查左值與右值是否不相等。
> 大於 (Greater than) a > b true 檢查左值是否大於右值。
< 小於 (Less than) a < b false 檢查左值是否小於右值。
>= 大於或等於 (Greater than or equal to) a >= b true 檢查左值是否大於或等於右值。
<= 小於或等於 (Less than or equal to) a <= b false 檢查左值是否小於或等於右值。
重要提醒: 判斷相等要使用兩個等號 ==;單個等號 = 是指派運算符號。


四、邏輯運算符號 (Logical Operators)

用於布林值運算,結果為布林值 (Boolean)。

符號 名稱 範例 (假設 x = true, y = false) 結果 說明
&& 邏輯 AND (Logical AND) x && y false 只有當兩個值都為 true 時,結果才為 true
|| 邏輯 OR (Logical OR) x || y true 只要任一值為 true,結果就為 true
! 邏輯 NOT (Logical NOT) !x false 反轉值的邏輯狀態。

短程運算 (Short-Circuit Evaluation)

&&|| 運算中,如果第一個運算已經能決定整個運算式的結果,則第二個運算式將不執行運算


五、位元運算符號 (Bit-wise Operators)

用於將數值作位元 (bit) 運算。

符號 名稱 範例 (假設 a = 6 (0110), b = 3 (0011)) 結果 (十進位) 說明
& 位元 AND a & b 2 每個位元都為 1 時才為 1。
| 位元 OR a | b 7 只要有任一位元為 1 即為 1。
^ 位元 XOR (互斥 OR) a ^ b 5 兩個位元不同時為 1。
~ 位元 NOT (一補數) ~a 依系統而異 反轉所有位元 (0 變 1,1 變 0)。
<< 左移 (Left Shift) a << 1 12 向左移動 N 位,右側補 0。相當於乘以 $2^N$。
>> 右移 (Right Shift) a >> 1 3 向右移動 N 位。相當於整數除以 $2^N$。


六、其他重要運算符號 (Other Essential Operators)

符號 名稱 範例 說明
?: 三元條件運算符號 (a > b) ? a : b; 三元運算符號:如果條件為真,傳回左側表達式;否則傳回右側表達式。
& 取址運算符號 &age 傳回變數在記憶體中的地址。
* 指標取值運算符號 *ptr 存取指標所指向記憶體地址中的值。
new 動態記憶體分配號 new 在執行時動態分配記憶體。(C++)
delete 動態記憶體釋放 delett 釋放由 new 分配的記憶體。(C++)
:: 區域解析運算符號 :: 用於指定變數或函式所屬的命名空間 (如 std) 或類別。(C++)

七、運算符號的優先等級與結合性 (Precedence and Associativity)

當一個運算式中有多個運算符號時,優先等級 (Precedence) 決定了哪個運算符號會先被執行;如果優先等級相同,則 結合性 (Associativity) 決定了運算的順序。

優先等級 運算符號 類型 結合性
1 (最高) ::, (), [], ->, . 一元/後置 左到右
2 ++, -- (前置), !, ~, & (地址), * (取值), new, delete 一元 右到左
3 *, /, % 乘法/除法 左到右
4 +, - 加法/減法 左到右
... (中間略)
11 && 邏輯 AND 左到右
12 || 邏輯 OR 左到右
14 =, +=, -=, 等複合指派 指派 右到左
15 (最低) , 逗號運算符 左到右

優先等級範例與最佳實踐

int x = 5 + 3 * 2; // 結果為 11 (先乘後加)
int y = (5 + 3) * 2; // 結果為 16 (括號優先)

為了程式碼的清晰和可維護性,強烈建議使用括號 () 來明確指定運算的順序,而非依賴記憶運算符的優先等級。


返回課程目錄
許老師APCS線上家教

留言

這個網誌中的熱門文章

目錄

資料型態

Code::Blocks