<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
**輸出結果 :**

:::
### <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
**輸出結果 :**

:::
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
**輸出結果 :**

:::
判斷是否為偶數時還可以使用 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
**輸出結果 :**

:::
### <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
**輸出結果 :**

第一種結果 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
**輸出結果 :**
  
:::