# C語言教學07 - 比較運算
## 撰寫於2018年9月
[現代C語言小心得](https://hackmd.io/s/HJPpJjvw7)
## 真假邏輯
真假邏輯顧名思義有真值(true)以及假值(false)。在C語言中,只有零代表假(false),其他非零數都代表真(true)。但在正常運算中,以1代表真。
## 相等運算
相等運算有兩種,分別是等於運算子(==)以及不等於運算子(!=)
:::warning
指派運算子(=)「不是」等於運算子(==)
:::
在運算中,如果關係成立,得到真值(1);若不成立,得到假值(0)。
例如
```C=
#include <stdio.h>
int main() {
printf("%d, %d, %d\n", 3==2, 4!=6, (1+4)==(3+5));
return 0;
}
```
執行結果
```
0, 1, 0
```
## 比較運算
比較運算有四種,分別是大於(>)、小於(<)、大於或等於(>=)、小於或等於(<=)。在運算中,若關係成立,得到真值(1);如果不成立,得到假值(0)。
```C=
#include <stdio.h>
int main() {
printf("%d, %d, %d\n", 4>5, 6<=7, 8 < 9);
return 0;
}
```
結果
```
0, 1, 1
```
### 常見誤解
假如還記得數學中有個遞移律的話,有些人可能會寫出
```C=
if (3>2>1) {
...
}
```
這樣可是會出問題的!我們看看電腦怎麼判斷這個運算。首先因為比較運算是由左而右,所以會先計算「3>2」,得到**真**,但是依照我們前面所敘述,**真**其實就是**1**,所以整個程式就會變成
```C=
if (1>1) {
...
}
```
很顯然這是錯誤的,所以一定要注意。
:::warning
很多數學直覺在電腦上不適用
:::
至於要怎麼解決呢?我們以後的邏輯運算可以處裡這類問題。