# 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 很多數學直覺在電腦上不適用 ::: 至於要怎麼解決呢?我們以後的邏輯運算可以處裡這類問題。