認識運算子#
運算子是用來執行特定操作的符號或關鍵字,如加法、減法、乘法、除法等,並且每種運算子有各自的優先級,優先級高的運算子會先被執行。以下內容將一一介紹常用的每個運算子。
算術運算子#
所謂的算術運算子就是加減乘除及取餘數,這些運算子是最基本也是最常用的。比較需要注意的部分是除法,因為在 C++ 裡面如果兩個整數相除,結果會自動無條件捨去小數點,所以如果要得到小數點的結果,至少有一個數字要是浮點數,關於浮點數運算的部分會在後面的章節詳細介紹。因此接下來本章節都會以整數型態為主來介紹。
首先來看看語法,其實這些運算子的語法就跟數學幾乎一樣:
cout << 5 + 2 << endl; // 7
cout << 5 - 2 << endl; // 3
cout << 5 * 2 << endl; // 10
cout << 5 / 2 << endl; // 2
int a = 5, b = 2;
cout << a + b << endl; // 7
cout << a - b << endl; // 3
cout << a * b << endl; // 10
cout << a / b << endl; // 2
如果有需要的話,也可以透過括號來改變運算的順序,這個部分也跟數學的用法一樣,括號內的部分會先被執行:
cout << 5 + 2 << endl; // 7
cout << 5 - 2 << endl; // 3
cout << 5 * 2 << endl; // 10
cout << 5 / 2 << endl; // 2 無條件捨去
cout << 5 % 2 << endl; // 1 (5 / 2 = 2 ... 1)
cout << 5 + 2 * 2 << endl; // 9 先乘除後加減
cout << (5 + 2) * 2 << endl; // 14 括號內優先執行
int a = 5, b = 2;
int c = a + b; // c = 7
int d = (a + b) * 2; // d = 14
cout << c << endl; // 7
cout << d << endl; // 14
cout << a * (b + 1) << endl; // 15
賦值運算子#
賦值運算子是用來將右邊的值賦予給左邊的變數,右邊可能是數字、另一個變數、也可能是一個算式。在寫程式的時候,經常會需要將某個值存起來,這時候就會用到賦值運算子。
這邊是一個簡單的例子:
int a = 5;
int b = a; // b = 5
int c = a + b; // c = 5 + 5 = 10
int d = a * b; // d = 5 * 5 = 25
cout << a << endl; // 5
cout << b << endl; // 5
cout << c << endl; // 10
cout << d << endl; // 25
寫程式的時候,常常會需要「改變」變數的值,最簡單的寫法就是這樣:
int a = 5;
a = a + 2; // a = 5 + 2 = 7
cout << a << endl; // 7
不過這樣寫起來有點麻煩,所以 C++ 提供了簡潔的寫法:
int a = 5;
a += 3; // a = 5 + 3 = 8
a -= 2; // a = 8 - 2 = 6
cout << a << endl; // 6
兩個作法效果是一樣的!
當然,賦值運算子不只有 += 這一種,還有 -=、*=、/=、%= 等等,這些運算子的效果就是將左邊的變數和右邊的值做運算,然後再將結果賦予給左邊的變數。
前後綴的遞增遞減#
因為在程式中 a += 1 或 a -= 1 這樣的寫法實在太常見了!所以 C++ 提供了更簡潔的寫法,就是 ++ 和 --,這兩個運算子可以將變數的值加一或減一。
這邊有一個例子:
int a = 5;
a++; // a = 6
a--; // a = 5
a--; // a = 4
cout << a << endl; // 4
不過這邊要注意的是,++ 和 -- 有兩種寫法,一種是放在變數的前面,一種是放在變數的後面,這兩者之間有差別:如果將符號寫在變數前面,會先執行遞增(減)的動作,然後再執行其他外層的運算,如果將符號寫在變數後面,則會先執行其他外層的運算,再執行遞增(減)的動作。
int APCS = 5;
cout << APCS++; // cout << 5 -> APCS += 1 = 6
cout << ++APCS; // APCS += 1 = 7 -> cout << 7
比較運算子#
比較運算子顧名思義就是用來比較並獲得兩個數值之間的關係,這些運算子的結果是一個布林值,也就是 true 或 false(輸出時會以 1 或 0 顯示)。
第一個類型就是大於小於,這兩個運算子的使用方式也和數學一樣:
cout << 5 < 2 << endl; // 0
cout << 5 > 2 << endl; // 1
cout << 5 <= 2 << endl; // 0
cout << 5 >= 2 << endl; // 1
int a = 5, b = 2;
cout << a < b << endl; // 0
cout << a > b << endl; // 1
cout << a <= b << endl; // 0
cout << a >= b << endl; // 1
接著是等於和不等於,這兩個運算子就比較特別了,在 C++ 裡面,等於是 ==,而不等於是 !=:
cout << 5 == 2 << endl; // 0
cout << 5 != 2 << endl; // 1
cout << 5 == 5 << endl; // 1
int a = 5, b = 2;
cout << a == b << endl; // 0
cout << a != b << endl; // 1
cout << a == a << endl; // 1
新手最常犯的錯誤之一就是搞不清楚 == 和 = 之間的關係,一定要記得,兩個等號是比較兩個值是否相等,一個等號則是上面提到的賦值。
補充
! 驚嘆號在 C++ 裡代表 相反,或是 不 的意思,未來的章節會再詳細介紹。
運算子優先級#
先乘除後加減是數學的基本原則,而在 C++ 裡面,所有的運算子都有各自的優先級,而優先級較小的運算子會先被執行,如果遇到優先級相同的運算子,則會依照左至右的順序來執行:
| 運算子 | 優先級 |
|---|---|
++ (後綴) | 2 |
-- (後綴) | 2 |
++ (前綴) | 3 |
-- (前綴) | 3 |
* | 5 |
/ | 5 |
% | 5 |
+ | 6 |
- | 6 |
< | 9 |
<= | 9 |
> | 9 |
>= | 9 |
== | 10 |
!= | 10 |
= | 17 |
+= | 17 |
-= | 17 |
*= | 17 |
/= | 17 |
%= | 17 |
不過在實作中,不需要把這整個表格記起來,如果真的沒把握或者是出現意外的情況那就用括號來確保運算的順序就可以了!
