昨天認識完了 C++的基本型態,今天就來看看運算子的部分吧~
在認識運算子之前,先來認識一下運算式(expression)
運算式(expression)就是用來計算一個值(value)的表示法,主要會由運算元(operand)及運算子(operator)組成
最簡單的運算式是常數運算式,就是由一個運算元(operand)組成,像是 1 這樣就可以是個運算式
另外,運算子之間會有優先程度,運算子優先級,這個也要特別注意唷
有了這個簡單的雛型就繼續往下吧
C++的算術運算子有以下幾種類型,都需要有兩個運算元來組成運算式:
算術運算子 | 功能 | 範例 |
---|---|---|
+ | 加 | a + b |
- | 減 | a - b |
* | 乘 | a * b |
/ | 除 | a / b |
% | 取餘數 | a % b |
浮點數的類型(float, double)無法取餘數!!
這邊要提醒一下,除了整數跟浮點數這兩種可以做算術運算子以外,字元也是支援的,因為字元其實是對應到 ASCII 編碼整數值
遞增運算子為: ++,功能就是數值+1,有前後之分
int s = 1;
cout << s++ << endl; // 後遞增,此時s輸出還是1,但值下次讀取已是2
cout << s << endl; // 2
int t =1;
cout << ++t << endl; // 前遞增,此時t輸出是2,下次輸出也還是2
cout << t << endl; // 2
遞減運算子為: --,功能為數值-1,也有前後之分,運作邏輯跟遞增運算子一樣
關係運算子需要兩個運算元,運算的結果是布林型態的數值,True or False
運算子 | 功能 | 範例 |
---|---|---|
< | 小於 | a < b |
<= | 小於等於 | a <= b |
> | 大於 | a > b |
>= | 大於等於 | a >= b |
== | 相等 | a == b |
!= | 不等 | a != b |
邏輯運算子跟關係運算子相似,也都是兩個運算元,運算的結果也都是布林型態
運算子 | 功能 | 範例 |
---|---|---|
! | 非 | !a |
&& | 且 | a && b |
|| | 或 | a || b |
C++ 裡唯一的三元運算子 ?:
,需要三個運算元也可以是運算式
expr1?expr2:expr3
int a = 1;
int b = 2;
int c = a > b ? a : b; // c = b
位元運算子也是需要兩個運算元,兩個運算元會是兩進位的 0, 1 組合,來做運算
運算子 | 功能 | 範例 |
---|---|---|
& | 且 | a & b |
| | 或 | a | b |
^ | 互斥或 | a ^ b |
~ | 取 1 的補數 | ~a |
<< | 向左位移 | a << b |
>> | 向右位移 | a >> b |
假設 8 位元的整數 a 為 4,b 為 7:a: 0000 0100 b: 0000 0111
如果是a & b就是0000 0100
如果是a | b就是0000 0111
如果是a ^ b就是0000 0011
取 1 的補數運算,假設 8 位元整數 c 為 255:a: 1111 1111
補數運算是將所有的位元 0 變 1,1 變 0,所以~a: 0000 0000
左移(<<)與右移(>>)兩個運算子:
左移運算子會將所有的位元往左移指定的位數,左邊被擠出去的位元會被丟棄,而右邊會補上 0;右移運算則是相反,會將所有的位元往右移指定的位數,右邊被擠出去的位元會被丟棄,至於左邊位元補 0 或補 1 則不一定
int a = 1;
a = a << 1;
cout << a << endl; // 2
a = a >> 1;
cout << a << endl; // 1
C++的指派運算子為 =,就是將右邊的值拷貝給左邊的變數。
也可以跟算術運算子還有位元運算子做結合:
int a = 1;
a += 1; // 等同於 a = a + 1
int b = 2;
a ^= b; // 等同於 a = a ^ b
今天快速地看過了運算子的部分,明天就朝當初讓我腦袋很痛的指標前進吧~