> For the complete documentation index, see [llms.txt](https://gitbook.ziyuesinicization.site/blitz-basic-language-reference/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://gitbook.ziyuesinicization.site/blitz-basic-language-reference/zh_hans/expressions-and-conversions.md).

# 表达式和转换

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 则为假。
