
# 算术运算符
算术运算符包括双目运算与单目运算，这些运算符都将返回数字类型。
表1算术运算符 
| **运算符** | **返回类型** | **描述**                                                             |
|:---|:---|:---|
| A + B   | 所有数字类型   | A和B相加。结果数据类型与操作数据类型相关，例如一个整数类型数据加上一个浮点类型数据，结果数值为浮点类型数据。            |
| A--B    | 所有数字类型   | A和B相减。结果数据类型与操作数据类型相关。                                             |
| A \* B  | 所有数字类型   | A和B相乘。结果数据类型与操作数据类型相关。                                             |
| A / B   | 所有数字类型   | A和B相除。结果是一个double（双精度）类型的数值。                                       |
| A % B   | 所有数字类型   | A对B取余数，结果数据类型与操作数据类型相关。                                            |
| A \& B  | 所有数字类型   | 查看两个参数的二进制表示法的值，并执行按位"与"操作。两个表达式的一位均为1时，则结果的该位为1。否则，结果的该位为0。       |
| A \| B  | 所有数字类型   | 查看两个参数的二进制表示法的值，并执行按位"或"操作。只要任一表达式的一位为1，则结果的该位为 1。否则，结果的该位为0。      |
| A \^ B  | 所有数字类型   | 查看两个参数的二进制表示法的值，并执行按位"异或"操作。当且仅当只有一个表达式的某位上为1时，结果的该位才为1。否则结果的该位为0。 |
| \~A     | 所有数字类型   | 对一个表达式执行按位"非"操作（取反）。                                               |
   
#### 注意事项
- 整数除法使用div函数，/ 运算符始终返回DOUBLE类型。
- ANSI模式下（Spark 4.0默认开启），整数除以零将抛出异常而非返回NULL。
- 位运算符（\&、\|、\^、\~）仅适用于整数类型。
- % 取余运算符与 mod() 函数等效。
 
#### 示例1：基本四则运算
```
SELECT 1 + 2;    -- 3
SELECT 5 - 3;    -- 2
SELECT 2 * 3;    -- 6
SELECT 10 / 3;   -- 3.333...
```
#### 示例2：取余运算
```
SELECT 10 % 3;   -- 1
SELECT 7 % 2;    -- 1
```
#### 示例3：位运算
```
SELECT 5 & 3;    -- 1   (0101 & 0011 = 0001)
SELECT 5 | 3;    -- 7   (0101 | 0011 = 0111)
SELECT 5 ^ 3;    -- 6   (0101 ^ 0011 = 0110)
SELECT ~5;       -- -6  (按位取反)
```
#### 示例4：混合类型运算
```
SELECT 1 + 2.5;      -- 3.5 (整数+浮点=浮点)
SELECT 10 / 3;        -- 3.333... (除法返回DOUBLE)
SELECT CAST(10 AS DOUBLE) / 3; -- 3.333...
```
