---
# System prepended metadata

title: 運算子
tags: [初階班]

---

---
tags: 初階班
---
# 算數運算子

| 功能 | 運算子 | 舉例 |
| :---- | :-- |:---|
| 加 | + |a + b|
| 減 | - |a - b|
| 乘 | * |a * b|
| 除 | / |a / b|
| 取餘數(mod) | % |a % b|

:::warning
注意：對整數型態的變數做除法運算時只會保留整數部分，而非四捨五入
ex : 
```cpp=
int a = 3, b = 2;
cout << a / b; //輸出1
```
:::

# 設定運算子(賦值)

## 直接賦值
| 功能 | 運算子 | 舉例|
| -------- | -------- |---|
| 令a的值為b | = | a = b |

## 運算賦值
基本上就是算數運算子加一個等號

| 功能 | 運算子 | 舉例 | 等同於|
| --- | --- | --- | ---|
| 加法賦值 | += | a += b | a = a + b|
| 減法賦值 | -= | a -= b| a = a - b|
| 乘法賦值 | *= | a *= b | a = a * b|
| 除法賦值 | /= | a /= b| a = a / b |
|取餘賦值 | %= | a %= b | a = a % b |

`a += b`的速度比`a = a + b`快一些

## 單元運算子
只需要對一個變數操作的運算子

| 功能 | 運算子 | 舉例 |
| --- | --- | --- |
| 取正 | + | + a |
| 取負 | - | - a |
| 遞增 | ++ | +\+a, a++ |
| 遞減 | -\- | -\-a, a-\- |
:::info
:::spoiler 前置遞增(減)/後置遞增(減)
運算子放在變數之前(`++a`)叫前置遞增，反之放在後方(`a++`)則叫做後置遞增
至於兩者差別在哪呢
前置遞增會先做完`+1`的運算之後再賦值，後置遞增則是先賦值再`+1`
也就是
```cpp=
int n = 1, m = 1;
int n2 = n++; //n2 = 1
int m2 = ++m; //m2 = 2
```
不過最後 n = m = 2

但兩者都可以用於對原變數直接改變
也就是
```cpp=
int n = 1, m = 1;
n++;
++m;
cout << n << ' ' << m; //輸出2 2
```
而`--`和`++`都一樣，只是`+1`變成`-1`
:::

:::info
:::spoiler 例題：[a014 中華民國萬歲！](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a014)
題目：給定西元年，輸出民國年
應該都知道民國年=西元年-1911吧 ~~不知道的對不起國家~~
```cpp=
#include <iostream>
using namespace std;
int main(){
    int n;
    cin >> n;
    int ans = n - 1911;
    cout << ans;
    //也可以直接 cout << n - 1911;
}
```
:::

## 關係運算子
判斷一個條件是否符合，若符合會回傳`True(1)`否則回傳`False(0)`

| 判斷 | 運算子 | 舉例 |
| --- | --- | --- |
| 等於 | == | a == b |
| 不等於 | != | a != b |
| 大於 | > | a > b |
| 大於等於 | >= | a >= b |
| 小於 | < | a < b |
| 小於等於 | <= | a <= b |

:::warning
不可以寫 => 或 =<
:::
## 邏輯運算子
對兩個條件式做判斷，成立回傳`True(1)`，不成立回傳`False(0)`

| 判斷 | 運算子 | 舉例 |
| --- | --- | --- |
| And(同時符合) | && / and | A && B |
| Or(其中一個符合) | \|\| / or | A \|\| B|
| Xor(兩者不同) | ^ | A ^ B|

真值表：
|| And | Or | Xor |
| --- | --- | --- | --- |
| <font color="#f00">False</font>/ <font color="#f00">False</font> | <font color="#f00">False</font> | <font color="#f00">False</font> | <font color="#f00">False</font> |
| <font color="#f00">False</font>/ True | <font color="#f00">False</font> | True | True |
| True/ <font color="#f00">False</font> | <font color="#f00">False</font> | True | True |
| True/ True | True | True | <font color="#f00">False</font> |

:::info
"邏輯非"運算： ! (這是運算子 不是教學很驚訝)
若A = True 則 !A = False
反之若A = False 則 !A = True
ex:
```cpp=
#include <iostream>
using namespace std;
int main(){
    bool a = true, b = false;
    cout << !a << '\n'; //輸出0
    cout << !b << '\n'; //輸出1
    return 0;
}
```
:::

