diff --git a/docs/notes/01_c-basic/05_xdx/index.md b/docs/notes/01_c-basic/05_xdx/index.md index 81af2b9..760297d 100644 --- a/docs/notes/01_c-basic/05_xdx/index.md +++ b/docs/notes/01_c-basic/05_xdx/index.md @@ -2367,60 +2367,65 @@ int main() { > [!NOTE] > +> `优先级`和`结合性`的定义,如下所示: +> > * ① 所谓的`优先级`:就是当多个运算符出现在同一个表达式中时,先执行哪个运算符。 > * ② 所谓的`结合性`:就是当多个相同优先级的运算符出现在同一个表达式中的时候,是从左到右运算,还是从右到左运算。 > * `左结合性`:具有相同优先级的运算符将`从左到右`(➡️)进行计算。 > * `右结合性`:具有相同优先级的运算符将`从右到左`(⬅️)进行计算。 +> +> 总结:先看`优先级`;如果优先级相同,再看`结合性`。 * C 语言中运算符的优先级有几十个,有的运算符优先级不同,有的运算符优先级相同,如下所示: -| 优先级 | 运算符 | 名称或含义 | 结合方向 | -| ------ | ---------- | --------------------------------- | ------------- | -| `0` | `()` | 小括号,最高优先级 | ➡️(从左到右) | -| `1` | `++`、`--` | 后缀自增和自减,如:i++、i-- 等 | ➡️(从左到右) | -| `1` | `()` | 小括号,函数调用,如:sum(1,2) 等 | ➡️(从左到右) | -| `1` | `.` | 成员选择(对象) | ➡️(从左到右) | -| | `->` | 成员选择(指针) | | -| **2** | `-` | 负号运算符 | ⬅️(从右到左) | -| | `(类型)` | 强制类型转换 | | -| | `++` | 自增运算符 | | -| | `--` | 自减运算符 | | -| | `*` | 取值运算符 | | -| | `&` | 取地址运算符 | | -| | `!` | 逻辑非运算符 | | -| | `~` | 按位取反运算符 | | -| | `sizeof` | 长度运算符 | | -| **3** | `/` | 除 | ➡️(从左到右) | -| | `*` | 乘 | | -| | `%` | 余数(取模) | | -| **4** | `+` | 加 | ➡️(从左到右) | -| | `-` | 减 | | -| **5** | `<<` | 左移 | ➡️(从左到右) | -| | `>>` | 右移 | | -| **6** | `>` | 大于 | ➡️(从左到右) | -| | `>=` | 大于等于 | | -| | `<` | 小于 | | -| | `<=` | 小于等于 | | -| **7** | `==` | 等于 | ➡️(从左到右) | -| | `!=` | 不等于 | | -| **8** | `&` | 按位与 | ➡️(从左到右) | -| **9** | `^` | 按位异或 | ➡️(从左到右) | -| **10** | `\|` | 按位或 | ➡️(从左到右) | -| **11** | `&&` | 逻辑与 | ➡️(从左到右) | -| **12** | `\|\|` | 逻辑或 | ➡️(从左到右) | -| **13** | `?:` | 条件运算符 | ⬅️(从右到左) | -| **14** | `=` | 赋值运算符 | ⬅️(从右到左) | -| | `/=` | 除后赋值 | | -| | `*=` | 乘后赋值 | | -| | `%=` | 取模后赋值 | | -| | `+=` | 加后赋值 | | -| | `-=` | 减后赋值 | | -| | `<<=` | 左移后赋值 | | -| | `>>=` | 右移后赋值 | | -| | `&=` | 按位与后赋值 | | -| | `^=` | 按位异或后赋值 | | -| | `\|=` | 按位或后赋值 | | -| **15** | `,` | 逗号运算符 | ➡️(从左到右) | +| 优先级 | 运算符 | 名称或含义 | 结合方向 | +| ------ | -------------- | ------------------------------------------- | ------------- | +| `0` | `()` | 小括号,最高优先级 | ➡️(从左到右) | +| `1` | `++`、`--` | 后缀自增和自减,如:`i++`、`i--` 等 | ➡️(从左到右) | +| | `()` | 小括号,函数调用,如:`sum(1,2)` 等 | | +| | `[]` | 数组下标,如:`arr[0]`、`arr[1]` 等 | | +| | `.` | 结构体或共用体成员访问 | | +| | `->` | 结构体或共用体成员通过指针访问 | | +| `2` | `++`、`--` | 前缀自增和自减,如:`++i`、`--i` 等 | ⬅️(从右到左) | +| | `+` | 一元加运算符,表示操作数的正,如:`+2` 等 | | +| | `-` | 一元减运算符,表示操作数的负,如:`-3` 等 | | +| | `!` | 逻辑非运算符(逻辑运算符) | | +| | `~` | 按位取反运算符(位运算符) | | +| | `(typename)` | 强制类型转换 | | +| | `*` | 解引用运算符 | | +| | `&` | 取地址运算符 | | +| | `sizeof` | 取大小运算符 | | +| `3` | `/` | 除法运算符(算术运算符) | ➡️(从左到右) | +| | `*` | 乘法运算符(算术运算符) | | +| | `%` | 取模(取余)运算符(算术运算符) | | +| `4` | `+` | 二元加运算符(算术运算符),如:`2 + 3` 等 | ➡️(从左到右) | +| | `-` | 二元减运算符(算术运算符),如:`3 - 2` 等 | | +| `5` | `<<` | 左移位运算符(位运算符) | ➡️(从左到右) | +| | `>>` | 右移位运算符(位运算符) | | +| `6` | `>` | 大于运算符(比较运算符) | ➡️(从左到右) | +| | `>=` | 大于等于运算符(比较运算符) | | +| | `<` | 小于运算符(比较运算符) | | +| | `<=` | 小于等于运算符(比较运算符) | | +| `7` | `==` | 等于运算符(比较运算符) | ➡️(从左到右) | +| | `!=` | 不等于运算符(比较运算符) | | +| `8` | `&` | 按位与运算符(位运算符) | ➡️(从左到右) | +| `9` | `^` | 按位异或运算符(位运算符) | ➡️(从左到右) | +| `10` | `\|` | 按位或运算符(位运算符) | ➡️(从左到右) | +| `11` | `&&` | 逻辑与运算符(逻辑运算符) | ➡️(从左到右) | +| `12` | `\|\|` | 逻辑或运算符(逻辑运算符) | ➡️(从左到右) | +| `13` | `?:` | 三目(三元)运算符 | ⬅️(从右到左) | +| `14` | `=` | 简单赋值运算符(赋值运算符) | ⬅️(从右到左) | +| | `/=` | 除后赋值运算符(赋值运算符) | | +| | `*=` | 乘后赋值运算符(赋值运算符) | | +| | `%=` | 取模后赋值运算符(赋值运算符) | | +| | `+=` | 加后赋值运算符(赋值运算符) | | +| | `-=` | 减后赋值运算符(赋值运算符) | | +| | `<<=` | 左移后赋值运算符(赋值运算符) | | +| | `>>=` | 右移后赋值运算符(赋值运算符) | | +| | `&=` | 按位与后赋值运算符(赋值运算符) | | +| | `^=` | 按位异或后赋值运算符(赋值运算符) | | +| | `\|=` | 按位或后赋值运算符(赋值运算符) | | +| `15` | `,` | 逗号运算符 | ➡️(从左到右) | > [!WARNING] >