# 運算子、運算式

> 程式是由許多敘述組成的，而敘述的基本單位是運算元與運算子。 透過本章學習如何進行運算式之資料型態的轉換。

### 一、認識運算式

* 運算式由運算元（operand）與運算子（operator）組成
* 運算元可以是變數或是常數
* 運算子就是數學上的運算符號
* 如「+」、「-」、「\*」、「/」等

![根據運算子所使用的類別可分為：設定、算數、關係、邏輯、條件、逗號以及遞增與遞減運算子。](https://2439647256-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M4NDwp0sFRvD07cdujE%2F-M4ggVaIDlmqJQGe0moO%2F-M4ggw8FVfjwM6VEJfPz%2Fimage.png?alt=media\&token=349defc8-4fc6-4d51-b576-dbe647e79638)

![將變數設值可使用設定運算子](https://2439647256-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M4NDwp0sFRvD07cdujE%2F-M4ggVaIDlmqJQGe0moO%2F-M4gh27sXM6FUyR0AFVf%2Fimage.png?alt=media\&token=a1cd0682-2144-4af1-b179-c0c098fe82b4)

{% hint style="info" %}
等號（=）並不是「等於」，而是「設定」
{% endhint %}

### 二、一元運算子

一元運算子只需要一個運算元

```
+6; // 表示正6
~a; // 表示取a的1補數
x=-y; // 表示負y的值設定給變數x存放
!a; // a的NOT運算，若a為0，則!a為1，若a不為0，則!a為0
```

使用！運算元必須為 boolean 型態

| 一元運算子 | 意義      |
| ----- | ------- |
| +     | 正號      |
| –     | 負號      |
| !     | NOT 否定  |
| \~    | 取 1 的補數 |

### 三、算術運算子

| 算術運算子 | 意義 |
| ----- | -- |

| + | 加法 |
| - | -- |

| – | 減法 |
| - | -- |

| \* | 乘法 |
| -- | -- |

| / | 除法 |
| - | -- |

| % | 取餘數 |
| - | --- |

{% hint style="info" %}
在除法的部分，要注意資料型態的變化。
{% endhint %}

### 四、關係運算子與 if 敘述

如果括號中的條件判斷成立，就會執行後面的敘述；若是條件判斷不成立時，則後面的敘述就不會執行。

| 關係運算子 | 意義   |
| ----- | ---- |
| >     | 大於   |
| <     | 小於   |
| >=    | 大於等於 |
| <=    | 小於等於 |
| ==    | 等於   |
| !=    | 不等於  |

### 五、遞增與遞減運算子

善用遞增與遞減運算子可提高城市的簡潔程度。

| 遞增與遞減運算子 | 意義       |
| -------- | -------- |
| ++       | 遞增，變數值加一 |
| —        | 遞減，變數值減一 |

> a++ 會先執行整個敘述後再將a的值加 1
>
> ++a則先把a的值加 1 後再執行整個敘述

### 六、邏輯運算子

&& ：運算子前後的兩個運算元之傳回直接為真，運算的結果才會為真。

|| ：運算子前後只要一個為真，運算的結果就會為真。

```
a>0 && b>0 // 兩個運算元皆為真，運算結果才為真
a>0 || b>0 // 兩個運算元只要一個為真，運算結果就為真
```

| 邏輯運算子 | 意義    |
| ----- | ----- |
| &&    | AND 且 |
| \|\|  | OR 或  |

AND ：兩者都要為真，運算結果才會為真。

| AND | T | F |
| --- | - | - |
| T   | T | F |
| F   | F | F |

OR ：其中一個為真，運算結果就為真。

| OR | T | F |
| -- | - | - |
| T  | T | T |
| F  | T | F |

### 七、括號運算子

( ) 可以提高括號內運算式的優先處理順序

![優先順序數字愈小，表示優先順序愈高。](https://2439647256-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M4NDwp0sFRvD07cdujE%2F-M4ggVaIDlmqJQGe0moO%2F-M4gi60soO9GHLehlTJK%2Fimage.png?alt=media\&token=7f61bcc7-4090-4aa1-a204-f3d584d33a42)

![範例](https://2439647256-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M4NDwp0sFRvD07cdujE%2F-M4ggVaIDlmqJQGe0moO%2F-M4gi9k93lRWWcxIlwzA%2Fimage.png?alt=media\&token=c255a230-460f-483f-9968-409b5ab2d085)

### 八、運算式

運算式可以由數值、變數或是其他運算元與運算子所組合而成。

| 運算子 | 用法    | 說明          | 意義     |
| --- | ----- | ----------- | ------ |
| +=  | a+=b  | a+b 的值放到 a  | a=a+b  |
| -=  | a-=b  | a-b 的值放到 a  | a=a-b  |
| \*= | a\*=b | a\*b 的值放到 a | a=a\*b |
| /=  | a/=b  | a/b 的值放到 a  | a=a/b  |
| %=  | a%=b  | a%b 的值放到 a  | a=a%b  |

### 九、運算式的型態轉換

允許資料型態暫時轉換成其他型態的情況發生，以不流失資料為前提，即可做不同型態轉換。

根據以下規則來處理型態的轉換：

* 佔用位元組較少的型態轉換成位元組較多的型態
* 字元型態會轉換成short型態（字元會取其unicode碼）
* short型態（2 bytes）遇上int型態（4 bytes），會轉換成int型態
* int型態會轉換成float型態
* 運算式中若某個運算元的型態為double，則另一個運算元也會 轉換成double型態
* 布林型態不能轉換成其它的型態
