# 表示式和轉換

Blitz 支援以下運算子，其順序為優先順序從高到低：

| 關鍵字                             | 型別        | 一元 / 二元 |
| ------------------------------- | --------- | ------- |
| `New`, `First`, `Last`          | 自定型別運算子   | 一元運算子   |
| `Before`, `After`               | 物件運算子     | 一元運算子   |
| `Int`, `Float`, `Str`           | 型別轉換運算子   | 一元運算子   |
| `+`, `-`, `~`                   | 按位運算子     | 一元運算子   |
| `^`                             | 冪運算子      | 二元運算子   |
| `*`, `/`, `Mod`                 | 算術乘、除、模   | 二元運算子   |
| `Shl`, `Shr`, `Sar`             | 二進位制位移運算子 | 二元運算子   |
| `+`, `-`                        | 算術加、減     | 二元運算子   |
| `<`, `>`, `<=`, `>=`, `=`, `<>` | 比較運算子     | 二元運算子   |
| `And`, `Or`, `Xor`              | 並且、或者、異或  | 二元運算子   |
| `Not`                           | 邏輯否       | 一元運算子   |

**一元運算子**需要一個運算元，而**二元運算子**需要兩個運算元。

算術運算子產生與運算元資料型別相同的資料。例如，兩個整數值相加將產生一個整數值結果。

如果二元運算子或比較運算子的兩個運算元不同，則使用以下轉換規則進行轉換：

* 如果其中一個運算元是自定型別物件，則另一個必須是相同型別的物件，否則返回 `Null`。
* 如果其中一個運算元是字串，則另一個將轉為字串。
* 如果其中一個運算元是浮點值，則另一個將轉為浮點值。
* 否則，兩個運算元必須為整數值。

當浮點值轉換到整數值時，該值將舍入為最接近的整數值。當整數值和浮點值轉換為字串時，將轉換為數字的字串表達形式。

當字串轉換為整數值或浮點值時，字串將在第一個非數字字元或結尾處停止轉換。

字串唯一可以使用的運算子是 `+`，它被用於連線兩個字串。

`Int`、`Float` 和 `Str` 可以用於轉換值。它們的後面可以跟隨適當的型別標籤，例如：`Int%`、`Str$` 和 `Float#`。

比較運算子始終產生整數值結果：`1` 代表真，`0` 代表假。

如果其中一個運算元是自定型別物件，則另一個運算元必須是相同型別的物件，或者為 `Null`，並且允許使用的唯二運算子是比較運算子 `=` 和 `<>`。

按位運算子和邏輯運算子將始終將其運算元轉換為整數值，併產生整數值結果。

邏輯否運算子將在運算元非 0 時返回 `0`，反之則為 `1`。當表示式被用於條件執行程式碼中時（例如 `If` 語句），結果將被轉換為整數值，非 0 結果為真，0 則為假。
