## 算術運算符
### 算術運算符
|名稱|符號|說明|
|--|--|--|
|加法運算符|`+`|雙目運算符,即應有兩個量參與加法運算。如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
```