---
# System prepended metadata

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

---

<style>
	.mkd {
		background-color: rgba(0, 150, 250, .2);
	}
</style>

# 運算子

## intro
運算子和基本內建型別一樣，都是<span class="mkd">不需要任何標頭檔和命名空間</span>就可以使用的指令

## 設定運算子/指定運算子
|運算子|功能|例子|
|-|-|-|
|=|將a指定為b|a = b|

## 單元運算子
|運算子|功能|例子|
|-|-|-|
|+|正|+a|
|-|負|-a|
|++|遞增|\++a,a++|
|-\-|遞減|-\-a,a-\-|
|!|否(0變1,1變0)|!a|
|~|取1的補數|~a|

## 算數運算子
|運算子|功能|例子|
|-|-|-|
|+|加|a + b|
|-|減|a - b|
|*|乘|a * b|
|/|除|a / b|
|%|取餘數|a % b|

## 關係運算子
符合條件電腦就會回傳<span class="mkd">true</span>(1),不符合就會回傳<span class="mkd">false</span>(0)

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

## 邏輯運算子

|運算子|功能|例子|
|-|-|-|
|&&/and|AND|a && b|
| \|\| / or|OR|a \|\| b|
|^|XOR|a ^ b|

|AND|true/1|false/0|
|------ |-|-|
|true/1 |true/1|false/0|
|false/0|false/0|false/0|


|OR|true/1|false/0|
|------ |-|-|
|true/1 |true/1|true/1|
|false/0|true/1|false/0|

|XOR|true/1|false/0|
|------ |-|-|
|true/1 |false/0|true/1|
|false/0|true/1|false/0|

## 位元運算子
進階班範圍，我還沒編，想學去問郭勝威
[位元運算](/BNkTGmiqRjC1WXPa8j-yTg)

## 運算子優先順序
運算子有不同的優先順序
如果沒有處理好可能會導致編譯成功
但效果和預期的不一樣
如果不確定優先順序的話就好好利用<span class="mkd">括號</span>
括號優先順序就和四則運算一樣
內部優先
> C++ 內建運算子、優先順序和關聯性
> https://docs.microsoft.com/zh-tw/cpp/cpp/cpp-built-in-operators-precedence-and-associativity?view=msvc-170

### 小測驗
:::warning
1 and 0 理論上是0
但什麼第一行的cout會輸出1呢
```cpp=
#include<iostream>
using namespace std;
int main(){
    cout << 1 && 0; //輸出1
}
```
:::spoiler 解答
因為<<運算子的優先順序比&&高
如果想輸出0的話要加括號
```cpp=
#include<iostream>
using namespace std;
int main(){
    cout << (1 && 0); //輸出1
}
```
:::