# C語言教學08 - 邏輯運算
## 撰寫於2018年9月
[現代C語言小心得](https://hackmd.io/s/HJPpJjvw7)
## 邏輯運算
邏輯運算很簡單,有三個運算
### 邏輯NOT運算 Logical Negation operator
這個運算子很簡單,就是(!)驚嘆號。這代表著邏輯反運算,!1=0、!0=1。例如:
```C=
#include <stdio.h>
int main() {
printf("%d, %d, %d\n", !(53==8), !0, !1);
return 0;
}
```
結果
```
1, 1, 0
```
### 邏輯AND運算 Logical AND operator
邏輯與運算子(&&)很簡單,就是兩個都是True,運算後才是True。假如左邊的運算元(operand)是False,直接返回False。
真值表如下:
| 左邊 | 右邊 | 左邊 && 右邊 |
|:----:|:----:|:------------:|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
|1|0|0|
|1|1|1|
:::warning
不要寫成一個&,這有其他意義
:::
```C=
#include <stdio.h>
int main() {
printf("%d, %d, %d\n", 1 && 0, (3==8) && (4==4), 1 && 1);
return 0;
}
```
結果
```
0, 0, 1
```
### 邏輯OR運算 Logical OR operator
邏輯或運算子(||兩個長條),代表只要其中一個是True,就回傳True。所以,只要左邊運算元是True,就不會檢查右邊了。
真值表如下:
| 左邊 | 右邊 | 左邊 \|\| 右邊 |
|:----:|:----:|:------------:|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
|1|0|1|
|1|1|1|
:::warning
不要寫成一個|,這有其他意義
:::
```C=
#include <stdio.h>
int main() {
printf("%d, %d, %d\n", 1 || 0, (3==8) || (3==4), 1 || 1);
return 0;
}
```
結果
```
1, 0, 1
```