算术运算表达式
语法
| 形式 | 语法 |
|---|---|
| 1 | 表达式 + 表达式 |
| 2 | 表达式 - 表达式 |
| 3 | 表达式 * 表达式 |
| 4 | 表达式 / 表达式 |
| 5 | 表达式 % 表达式 |
描述
算术运算表达式用于对两个表达式的值进行运算。
下表列出了当运算符和左侧操作数的类型确定时,支持的右侧操作数的类型
| 左侧操作数类型 \ 运算符 | + | - | * | / | % |
|---|---|---|---|---|---|
int | int float raw_pointer | int float | int float | int float | int float |
float | int float | int float | int float | int float | int float |
string | string int | ✖ | ✖ | ✖ | ✖ |
array | array | array | ✖ | ✖ | ✖ |
buffer | string buffer | ✖ | ✖ | ✖ | ✖ |
map | map | array map | ✖ | ✖ | ✖ |
raw_pointer | int | int raw_pointer | ✖ | ✖ | ✖ |
当操作数两端都是数值类型(int 或 float)时,运算符是数值意义上的算数运算;如果两侧的类型
不一致,则将 int 类型的操作数隐式转换为 float 类型后再进行运算。
算数运算任一操作数的类型是 float 时, 运算结果的类型为 float;否则结果类型为 int。
对于非算数运算,参见:
+ 加法运算
-
string类型,执行字符串链接,即将左右两侧的字符串连接成一个新的字符串。 如果右侧操作数是int类型,则将其转换为字符串后再进行连接。 -
array类型,执行数组连接,即将左右两侧的数组连接成一个新的数组。 -
map类型,执行映射连接,即将右侧映射的键值对添加到左侧映射中,产生一个新的映射。 如果两个映射中有相同的键,则右侧映射的键值对会覆盖左侧映射中的键值对。 -
buffer类型,执行缓冲区连接,即将左右两侧的缓冲区连接成一个新的缓冲区。 如果右侧操作数是string类型,则将其转换为缓冲区后再进行连接。 -
raw_pointer类型,执行指针偏移运算,即将左侧的指针向前或向后移动右侧指定的字节数。
- 减法运算
array类型,执行数组差集运算,即从左侧数组中移除所有在右侧数组中出现的元素,产生一个新的数组。raw_pointer类型,执行指针偏移运算,即将左侧的指针向前或向后移动右侧指定的字节数。 如果右侧操作数是raw_pointer类型,则计算两个指针之间的字节差值,结果类型为int。map类型,执行映射键移除运算,即从左侧映射中移除右侧数组或映射中指定的键,产生一个新的映射。
示例
int a = 10;
int b = 20;
int c = a + b * 2; // c 的值为 50
float d = 3.14;
float e = a + d; // e 的值为 13.14
string s1 = "Hello, ";
string s2 = "World!";
string s3 = s1 + s2; // s3 的值为 "Hello, World!"
array arr1 = [1, 2, 3];
array arr2 = [4, 5, 6];
array arr3 = arr1 + arr2; // arr3 的值为 [1, 2, 3, 4, 5, 6]
map map1 = {"a": 1, "b": 2};
map map2 = {"b": 3, "c": 4};
map map3 = map1 + map2; // map3 的值为 {"a": 1, "b": 3, "c": 4}
map map4 = map3 - ["a", "c"]; // map4 的值为 {"b": 3}