iT邦幫忙

2022 iThome 鐵人賽

DAY 8
0
自我挑戰組

30天重新認識C++系列 第 8

第八天: C++ 基本認識 (五)

  • 分享至 

  • xImage
  •  

昨天認識完了 C++的基本型態,今天就來看看運算子的部分吧~

C++ 運算式

在認識運算子之前,先來認識一下運算式(expression)

運算式(expression)就是用來計算一個值(value)的表示法,主要會由運算元(operand)及運算子(operator)組成

最簡單的運算式是常數運算式,就是由一個運算元(operand)組成,像是 1 這樣就可以是個運算式

另外,運算子之間會有優先程度,運算子優先級,這個也要特別注意唷

有了這個簡單的雛型就繼續往下吧

C++ 算術運算子

C++的算術運算子有以下幾種類型,都需要有兩個運算元來組成運算式:

算術運算子 功能 範例
+ a + b
- a - b
* a * b
/ a / b
% 取餘數 a % b

浮點數的類型(float, double)無法取餘數!!

這邊要提醒一下,除了整數跟浮點數這兩種可以做算術運算子以外,字元也是支援的,因為字元其實是對應到 ASCII 編碼整數值

C++ 遞增、遞減運算子

遞增運算子為: ++,功能就是數值+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,也有前後之分,運作邏輯跟遞增運算子一樣

C++ 關係運算子

關係運算子需要兩個運算元,運算的結果是布林型態的數值,True or False

運算子 功能 範例
< 小於 a < b
<= 小於等於 a <= b
> 大於 a > b
>= 大於等於 a >= b
== 相等 a == b
!= 不等 a != b

C++ 邏輯運算子

邏輯運算子跟關係運算子相似,也都是兩個運算元,運算的結果也都是布林型態

運算子 功能 範例
! !a
&& a && b
|| a || b

C++ 條件運算子

C++ 裡唯一的三元運算子 ?:,需要三個運算元也可以是運算式

expr1?expr2:expr3

int a = 1;
int b = 2;
int c = a > b ? a : b; // c = b

C++ 位元運算子

位元運算子也是需要兩個運算元,兩個運算元會是兩進位的 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++ 指派運算子

C++的指派運算子為 =,就是將右邊的值拷貝給左邊的變數。

也可以跟算術運算子還有位元運算子做結合:

int a = 1;
a += 1; // 等同於 a = a + 1

int b = 2;
a ^= b; // 等同於 a = a ^ b

今天快速地看過了運算子的部分,明天就朝當初讓我腦袋很痛的指標前進吧~

參考資料

C++ 算術運算
邏輯運算、位元運算


上一篇
第七天: C++ 基本認識 (四)
下一篇
第九天: C++ 基本認識 (六)
系列文
30天重新認識C++30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言