###### tags: `FoShiShi` # 運算子 ## What 運算子是**一種記號或符號,用於指定運算式內執行的計算類型** 例:`+(加), -(減), *(乘), /(除)` 其實就**跟數學的運算子一樣** 只是在`C++`的世界中 **有更多的運算方式跟更多可以用來計算的變數** 當然你也可重新定義運算子的計算方式,但這這就是`函式`的範圍了 這裡先不多講 ## When 當要對多個**數字或資料型態做運算**的時候 ## How ### 運算子pt.0(設定運算子) 就是`=` 用來把**後者的值**指定到**前者** 例:`int a = 1` :::warning `=` **不是判斷是否等於的意思** `==`才是 ::: :::danger 不要把`=`跟`==`搞混 這debug起來很麻煩 ::: --- ### 運算子pt.1(算數運算子) 一般運算子就是一般的運算子 跟數學一樣的那種 | 運算子 | 名稱 | 計算方式 | 例子 | | ----- | ------------- | ------------------------ | --------------- | | `+` | 加(add) | 取兩值**相加**之值 | `int x = a + b` | | `-` | 減(subtract) | 取兩值**相減**之值 | `int x = a - b` | | `*` | 乘以(multiply) | 取兩值**相乘**之值 | `int x = a * b` | | `/` | 除以(divide) | 取**前值除以後值之值** | `int x = a / b` | | `%` | 取模(modulo) | 取前值除以後值之**餘數之值** | `int x = a % b` | :::info 可能有人對這邊的**取模**比較陌生 其實就是**取餘數** 但當**被除數為負數時**,得出的餘數將會是負數(不整除的情況下) ::: 例: ```cpp= cout << 5 % 2 << endl; // 輸出 1 cout << -5 % 2 << endl; // 輸出 -1 cout << 5 % -2 << endl; // 輸出 1 cout << -5 % -2 << endl; // 輸出 -1 ``` | 運算子 | 名稱 | 計算方式 | 例子 | | ----- | ------| --------------- | -------- | | `+=` | 加等於 | 將一值**加上另一值** | `a += b` | | `-=` | 減等於 | 將一值**減上另一值** | `a -= b` | | `*=` | 乘等於 | 將一值**乘上另一值** | `a *= b` | | `/=` | 除等於 | 將一值**除上另一值** | `a /= b` | | `%= ` | 模等於 | 將一值**取另一值之模** | `a %= b` | :::info `a += b`就是`a = a + b` 其他的以此類推 ::: | 運算子 | 名稱 | 計算方式 | 例子 | | ----- | ---- | ------- | ------- | | `++` | 加加 | 將一值加1 | `a ++ ` | | `--` | 減減 | 將一值減1 | `a -- ` | :::info `a ++ `就是`a += 1`就是`a = a + 1` 其他的以此類推 ::: :::warning 沒有`**`跟`//`或`%%`這種鬼東西 這裡不是`python` ::: :::info 這裡的`+, -`也可以當作**正跟負** 像是 `int a = 1;` `int b = -a` `b` 就會是 `-1` ::: --- ### 運算子pt.2(關係運算子) 關係運算子就是對**兩個東西**取關係 判斷成**邏輯條件** 邏輯條件就是對**某些狀況進行的判斷**(`true` 跟 `false`) :::info **關係運算子**跟**邏輯運算子**都會配 [**`判斷`**](https://chrislaiisme.github.io/FoShiShi/if_else)(<font size=1px>這裡其實有超連結只是字是藍的所以不明顯</font>)來實作 ::: | 運算子 | 名稱 | 計算方式 | 例子 | | ----- | ------ | ----------------- | -------- | | `==` | 等於 | 兩值是否相等 | `a == b` | | `!=` | 不等於 | 兩值是否不相等 | `a != b` | | `<` | 小於 | 前值是否小於後值 | `a < b` | | `>` | 大於 | 前值是否大於後值 | `a > b` | | `<= ` | 小於等於 | 前值是否小於等於後值 | `a <= b` | | `>= ` | 大於等於 | 前值是否大於等於後值 | `a >= b` | :::danger 不要把`==` 跟 `=`搞混 用錯的話`debug`起來就真的很麻煩 (**因為很重要所以再講一次**) ::: --- ### 運算子pt.3(邏輯運算子) 邏輯運算子是用來做出**邏輯條件的運算** #### &&(and) 當我們做出`a && b`時 必須要a跟b都為`true`才會回傳`true` 其他都回傳`false` | a($\downarrow$)\b($\to$) | false | true | | ------------------------ | ----- | ----- | | false | false | false | | true | false | true | #### ||(or) 當我們做出`a || b`時 a或b為`true`就會回傳`true` 其他都回傳`false` | a($\downarrow$)\b($\to$) | false | true | | ------------------------ | ----- | ----- | | false | false | true | | true | true | true | #### !(not) 當我們做出`!a`時 a為`true`就回傳`false` a為`false`就回傳`true` (顯然這簡單到不用表格) :::danger 將邏輯運算子配合關係運算子可以形成各種神奇東西 但是如果要判斷`a < b < c`這樣的東西**不能直接這樣寫** 要用`&&`去連接 像是 `a < b && b < c` ::: --- ### 運算子pt.4(位元運算子) 這裡就不講了 因為初學根本用不到 有興趣自己去查 --- ### () 當你接了一大堆運算子的時候 你會發現**版面很亂** 或有些**運算的順序有問題** 所以可以在某些地方加上 **()** 就跟一般數學式的()一樣 會先執行裡面的運算 例: ```cpp= int a = 1, b = 2, c = 3; int d = (a + b) * ((c - a) / 2); ``` :::info `C++`中依然符合**先乘除後加減的規則** 至於其他的運算子的先後順序 有興趣的的可以去查 **"C++運算子優先順序"** ::: --- ## 實際應用 ### 題目1 輸入兩數`a, b` 請輸出`a + b` :::spoiler solution 用`+` ```cpp= #include<iostream> using namespace std; int main() { int a, b; cin >> a >> b; cout << a + b << endl; } ``` ::: ### 題目2 輸入三個數`a, b, c` 先把`a`加上`5` 再把`b`乘上`a` 最後輸出`b`取`c`的模 :::spoiler solution 反正就是上面的運算子 我懶得打 ```cpp= #include<iostream> using namespace std; int main() { int a, b, c; cin >> a >> b >> c; a += 5; b *= a; cout << b % c << endl; } ``` :::