<font style="text-shadow:0px 0px 15px #FF37FD;">運算子</font> == ###### tags: `Java` <font color="Brown">程式目的簡單地說就是運算,除了運算還是運算,程式語言中提供運算功能的就是運算子</font> ### <font color="#990DFF">算數運算</font> 算術相關的運算子+、-、*、/,也就是加、減、乘、除這類運算子,另外%,稱為模數運算子或餘除運算子。算術運算子使用上與你學過的加減乘除一樣,也是**先乘除後加減**。 :::warning **算術運算例子** ``` java= public class Count { public static void main(String[] args) { System.out.println(1 + 2 * 3); System.out.println(2 + 2 + 8 / 4); // 加上括號表示運算先後順序 System.out.println((2 + 2 + 8) / 4); // 取餘數 System.out.println(10 % 3); } } ``` :::danger **輸出結果 :** ![](https://i.imgur.com/GP9JhvR.png) ::: ### <font color="#990DFF">比較、條件運算</font> 數學上有大於、等於、小於的比較運算,Java 中也提供了這些運算子,這些運算子稱之為比較運算子(Comparison operator),它們有大於 (>)、不小於 (>=)、小於 (<)、不大於 (<=)、等於 (==)以及不等於 (!=),比較條件成立時以 **boolean 型態** true 表示,比較條件不成立時以 false 表示。 ==是兩個連續的=組成,而不是一個=,一個=是指定運算。例如若變數x與y要比較是否相等,應該是寫成x == y,而不是寫成x = y,後者作用是將y的值指定給x,而不是比較運算x與y是否相等。 :::warning **比較運算例子** ``` jave= public class Comparison { public static void main(String[] args) { System.out.printf("10 > 5 結果 %b%n", 10 > 5); System.out.printf("10 >= 5 結果 %b%n", 10 >= 5); System.out.printf("10 < 5 結果 %b%n", 10 < 5); System.out.printf("10 <= 5 結果 %b%n", 10 <= 5); System.out.printf("10 == 5 結果 %b%n", 10 == 5); System.out.printf("10 != 5 結果 %b%n", 10 != 5); } } ``` :::danger **輸出結果 :** ![](https://i.imgur.com/wrWausU.png) ::: Java 有個條件運算子(Conditional operator),使用方式如下: :::info 條件式 ? 成立傳回值 : 失敗傳回值 ::: 條件運算子傳回值依條件式結果而定,如果條件式結果為 true,則傳回 : 前的值,若為 false,則傳回 : 後的值。 :::warning **條件運算例子** ``` jave= public class Condition { public static void main(String[] args) { int lowScore = 35; int HighScore = 70; //判斷 lowScore 是否及格 System.out.printf("該生是否及格?%c%n", lowScore >= 60 ? '是' : '否'); //判斷 HighScore 是否及格 System.out.printf("該生是否及格?%c%n", HighScore >= 60 ? '是' : '否'); //判斷 lowScore 是否為偶數 System.out.printf("是否為偶數?%c%n", (lowScore % 2 == 0) ? '是' : '否'); //判斷 lowScore 是否為偶數 System.out.printf("是否為偶數?%c%n", (HighScore % 2 == 0) ? '是' : '否'); } } ``` :::danger **輸出結果 :** ![](https://i.imgur.com/PoJ9uob.png) ::: 判斷是否為偶數時還可以使用 if ...else 語法,如下程式 :::warning **if..else例子** ``` jave= public class Condition { public static void main(String[] args) { int number = 35; if (number % 2 == 0) { System.out.println("是否為偶數?是"); } else { System.out.println("是否為偶數?否"); } } } ``` :::danger **輸出結果 :** ![](https://i.imgur.com/UysHxrL.png) ::: ### <font color="#990DFF">邏輯運算</font> 邏輯上有 所謂的「且」(AND)、「或」(OR)與「反相」(NOT),在 Java 中也提供對應的邏輯運算子(Logical operator),分別為 &&(AND)、||(OR) 及 !(NOT)。 * <font color="#FF6363">&& (AND)</font> 每個條件須成立為 true * <font color="#FF6363">|| (OR)</font> 其中一個條件成立為 true * <font color="#FF6363">! (NOT)</font> 反向的結果 :::warning **邏輯運算例子** ``` jave= public class Logic { public static void main(String[] args) { int number = 75; //兩個條件須成立為true System.out.println(number > 70 && number < 80); //其中一個條件須成立為true System.out.println(number > 80 || number < 75); //將結果反向 System.out.println(!(number > 80 || number < 75)); } } ``` :::danger **輸出結果 :** ![](https://i.imgur.com/N7ojulF.png) 第一種結果 75 大於 70 且小於 80 為 true 第二種結果 75 沒有大於 80 也沒有小於 75 為flase 第三種結果 75 沒有大於 80 也沒有小於 75 為flase,但由於是 反向 ! (NOT) 所以結果為true ::: ### <font color="#990DFF">位元運算</font> AND、OR、NOT、XOR與補數運算,在 Java 中提供對應的運位元運算子(Bitwise Operator),分別是 &(AND)、|(OR)、^(XOR) 與 ~(補數)。 位元運算是逐位元運算。 * <font color="#FF6363">&(AND)</font> A 和 B 皆為 1 時,則為 1 :::danger **Ex:** 011 001 001 --->其結果 ::: * <font color="#FF6363">|(OR)</font> A 和 B 其中一者有 1 時,則為 1 :::danger **Ex:** 011 001 011 --->其結果 ::: :::success 如果還是不太懂得,可以使用看看我的方法,把 0 當成條件未成立,1 為條件成立。所以 &(AND) 為必須兩個都成立,也就是都為 1 的時候為 1 。 |(OR) 為其中一個成立,也就是其中一個為 1 的時候為 1 。 ::: * <font color="#FF6363">^(XOR)</font> A 和 B 不一樣時,則為 1 :::danger **Ex:** 011 001 010 --->其結果 ::: * <font color="#FF6363">~(補數)</font> 將位元 0 變為 1,1 變為 0 * <font color="#FF6363"><<(左移)</font> :::warning **位元運算例子** ``` jave= public class Bitwise { public static void main(String[] args) { System.out.println("AND運算:"); System.out.printf("0 AND 0 %5d%n", 0 & 0); System.out.printf("0 AND 1 %5d%n", 0 & 1); System.out.printf("1 AND 0 %5d%n", 1 & 0); System.out.printf("1 AND 1 %5d%n", 1 & 1); System.out.println("\nOR運算:"); System.out.printf("0 OR 0 %6d%n", 0 | 0); System.out.printf("0 OR 1 %6d%n", 0 | 1); System.out.printf("1 OR 0 %6d%n", 1 | 0); System.out.printf("1 OR 1 %6d%n", 1 | 1); System.out.println("\nXOR運算:"); System.out.printf("0 XOR 0 %5d%n", 0 ^ 0); System.out.printf("0 XOR 1 %5d%n", 0 ^ 1); System.out.printf("1 XOR 0 %5d%n", 1 ^ 0); System.out.printf("1 XOR 1 %5d%n", 1 ^ 1); } } ``` :::danger **輸出結果 :** ![](https://i.imgur.com/7rjWdOX.png) ![](https://i.imgur.com/QDgWKG5.png) ![](https://i.imgur.com/WsbEn3P.png) :::