運算子 Operator
運算子 operator 是什麼呢?
其實在 C++ 中,最簡單的運算子就是加 +
、減 -
、乘 *
、除 /
。其他比如說 <<
,或是等於 =
,或是 ++
,這些也都是比較常見的運算子。
基本上,運算子可以依功能分為三類:
- 算數
- 邏輯
- 比大小
接下來,就讓我們來看看每一類中有哪些比較常見的運算符吧!
測試範例
int main() { int x, y; x = 12; y = 5; std::cout << "x + y = " << x + y << std::endl; std::cout << "x - y = " << x - y << std::endl; std::cout << "x * y = " << x * y << std::endl; std::cout << "x / y = " << x / y << std::endl; std::cout << "x % y = " << x % y << std::endl; // x++ 跟 ++x 差別在哪呢? std::cout << "x++ = " << x++ << std::endl; std::cout << "++x = " << ++x << std::endl; return 0; }
輸出結果
x + y = 15 x - y = 7 x * y = 60 x / y = 2 x % y = 2 x++ = 12 ++x = 14
討論
首先讓我們先來討論除法,有注意到什麼奇怪的事嗎?
以數學來說,12/5 出來的結果應該是 2.4,但為什麼我們的程式跑出來結果只有2呢?
這是因為我們的 x
與 y
都是整數,所以程式在做運算時,算出來的結果也一定是整數。因此,原本的結果 2.4,小數點後面的數就會被自動省略變為 2。
那麼下一個問題就來了,我們會問說有沒有其他方法可以讓結果輸出為2.4呢?當然有!也就是把 x
與 y
都設為 float
浮點數。這麼一來,我們算出來的結果就會有小數點了!
接著我們來討論運算子 ++
,在程式中我們可以發現我們將 ++
分別擺放在不同的位置,而這也造成了輸出結果的不同。
其實,如果將 ++
擺放在變數之前,那就是代表先進行 +1 的動作,再執行該行程式碼。
若是擺放在變數之後,則代表先執行該行程式碼,執行完後再將變數 +1。
因此,std::cout << "x++ = " << x++ << std::endl;
這段程式碼就是在說,先把變數 x
印出來,再執行 +1。所以 x
在下一行才會輸出 14。
邏輯
運算子 | 功能 |
---|---|
&& | 且。兩邊表達式必須都為 true 結果才會是 true ,否則為 false |
|| | 或。兩邊表達式必須都為 false 結果才會是 false ,否則為 true |
! | 否。反轉表達式 |
測試範例
int main() { bool result; result = true && true; std::cout << "true && true is " << result << std::endl; result = true || false; std::cout << "true || false is " << result << std::endl; result = !false; std::cout << "!false is " << result << std::endl; return 0; }
輸出結果
true && true is 1 true || false is 1 !false is 1
討論
在輸出結果中我們可以看到,輸出的結果並非印出 true 或 false,而是 1 或 0。
這是因為在 C++ 甚至是大部分的程式語言中,電腦視 1 為 true,而 0 為 false。
因此,這行程式碼 bool result = 1 && 0;
也是有效的,然而因為可讀性,我們並不建議這麼宣告。
比大小
運算子 | 功能 |
---|---|
> | 大於 |
< | 小於 |
>= | 大於等於 |
<= | 小於等於 |
== | 相等於 |
!= | 不等於 |
測試範例
int main() { int x = 12; int y = 5; std::cout << "x < y is " << (x < y) << std::endl; std::cout << "x < y is " << (x < y) << std::endl; std::cout << "x >= y is " << (x >= y) << std::endl; std::cout << "x <= y is " << (x <= y) << std::endl; std::cout << "x == y is " << (x == y) << std::endl; std::cout << "x != y is " << (x != y) << std::endl; return 0; }
輸出結果
x < y is 0 x < y is 0 x >= y is 1 x <= y is 0 x == y is 0 x != y is 1
運算子鏈結
在 C++ 中,我們可以串接多個運算子,而且,運算子彼此之間也有順序性。比如說在數學中的先乘除後加減也同樣可以套用在 C++ 中。
因此,這行程式碼 int x = 3 * 2 + 9 / 3
就會讓我們的 x
為9。不過我們也可以應用括號來改變順序,比如說 int x = (3 * 2 + 9) / 3
,這樣我們的 x
就會是 5 了。
總結
這章我們看到變數要如何和運算子做結合,也了解到程式語言中有哪幾種常見的運算子。運算子的出現也為原本無聊的變數增加了幾分色彩。
在下一章,我們會來介紹 C++ 中更為進階的概念:陣列。