---
# System prepended metadata

title: 運算子
tags: [Java]

---

<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)
:::
