## 算术运算符
### 算术运算符
|名称|符号|说明|
|--|--|--|
|加法运算符|`+`|双目运算符,即应有两个量参与加法运算。如a+b,4+8等。具有左结合性。|
|减法运算符|`-`|双目运算符。但“-”也可作负值运算符,此时为单目运算,如-x,-5等具有左结合 性。|
|乘法运算符|`*`|双目运算符,具有左结合性。|
|除法运算符|`/`|双目运算符,具有左结合性。 **参与运算量均为整型时,结果也为整型,舍去小数。** 如果运算量中有一个是实型,则结果为双精度实型|
|求余运算符 (模运算符)|`%`|双目运算符,具有左结合性。要求参与运算的量均为整型,不能应用于float或double 类型。求余运算的结果等于两数相除后的余数,整除时结果为0。|
- 整数除于整数,求出来的结果依然是整数
- 浮点型赋值给整型会损失小数部分
- %两侧必须都为整数
- **利用%求出来的余数是正数还是负数,由%左边的被除数决定,被除数是正数,余数就是正数,反之则反**
### 结合性和优先级
- 结合性: 从左到右
- 优先级
+ `* / %` 优先级大于 `+ -`
+ 优先级相同则左结合计算
```
3*5/3+18
先算3*5
然后再算除3
最后结果再+18
```
### 算术运算的注意点
- 1. 自动类型转换
```
int a = 10.6;
int b = 10.5 + 1.7;
```
- 2. 自动将大类型转换为了小类型,会丢失精度
自动类型提升
```
int b = 10.5 + 10;
```
- 3. 将右边的10提升为了double类型
```
double b = 1.0 / 2; // 解决除法的精度问题
```
- 4. 强制类型转换
```
double a = (double)1 / 2;
double b = (double)(1 / 2);
```
## 求余运算符
### 求余运算注意事项
- 参与运算的必须是整数
+ 例如: `10%2` `20%3`
+ 错误写法: `12.3%3`
```
10 % 2 = 0 // 因为 10 可以被2整除, 没有余数
10 % 3 = 1 // 因为 10除以3余1, 所以结果为1
```
- **注意** `m% `求余,相当于`m/n `获取余数
+ (1) n 等于0 无意义
+ (2) m 等于0 结果为0
+ (3) `m>n` 正常求余 如:8%3 = 2
+ (4) `m<n` 结果是 m 如:2%4 = 2 1%4 = 1 3%8=3
- 运算结果的正负性取决于第一个运算数,跟后面的运算数无关
```
10 % 3 = 1
-10 % 3 = -1
10 % -3 = 1
```