C语言运算符优先级(大全)
🔺按照运算符的操作对象(变量或常量)的个数分为三类: 单目运算符;双目运算符;三目运算符
🔺注意:当优先级相同时,按结合方向来进行计算
C语言运算符优先级(大全)
1.
| 运算符 | 名称 |
|---|---|
| [] | 数组下标 |
| () | 圆括号 |
| . | 成员选择 |
| -> | 成员选择 |
🔴结合方向从左到右
"." 和 "->"多用在结构体(引用类,共用体)选择成员时使用。
直接访问结构的成员时用点运算符,通过指针访问结构的成员用箭头运算符。
struct student { char name[20]; int age; }A 对于A而言,如果A是个指针,则使用箭头运算符,(A->name)反之(A.name)。
2.
| 运算符 | 名称 |
|---|---|
| - | 负号 |
| ++ | 自增 |
| -- | 自减 |
| * | 取值(指针) |
| & | 取地址 |
| ! | 逻辑非 |
| (类型) | 强制转换类型 |
| sizeof | 求长度 |
| ~ | 按位取反 |
🔵 结合方向从右到左
~:按位取反是对二进制位补码取反
快捷算法:
X取反结果:~X=-(X+1)
对正数5按位取反,~5 十进制 5 二进制原码 00000101 二进制补码 00000101(正数原码=补码) 按位取反: 11111010(补码) 二进制原码 10000110 十进制 -6 对负数5按位取反,~-5 十进制 -5 二进制原码 10000101 二进制补码 11111011(负数补码=反码+1) 按位取反: 00000100(补码) 二进制原码 00000100(正数原码=补码) 十进制 4
3.
| 运算符 | 名称 |
|---|---|
| / | 除 |
| * | 乘 |
| % | 取余 |
🔴结合方向从左到右
4.
| 运算符 | 名称 |
|---|---|
| + | 加 |
| - | 减 |
🔴 结合方向从左到右
5.
| 运算符 | 名称 |
|---|---|
| << | 左移 |
| >> | 右移 |
🔴 结合方向从左到右
6.
| 运算符 | 名称 |
|---|---|
| 大于 | |
| >= | 大于等于 |
| < | 小于 |
| <= | 小于等于 |
🔴结合方向从左到右
7.
| 运算符 | 名称 |
|---|---|
| == | 等于 |
| != | 不等于 |
🔴结合方向从左到右
8.
| 运算符 | 名称 |
|---|---|
| & | 按位与 |
🔴结合方向从左到右
二进制位,两个均为1的取1,剩下的取0
9.
| 运算符 | 名称 |
|---|---|
| ^ | 按位异或 |
🔴结合方向从左到右
二进制位,相同的为0,不同的为1
10.
| 运算符 | 名称 | |
|---|---|---|
| 按位或 |
🔴结合方向从左到右
二进制位,有含1的取1,全为0的取0
11.
| 运算符 | 名称 |
|---|---|
| && | 逻辑与 |
🔴结合方向从左到右
12.
| 运算符 | 名称 | ||
|---|---|---|---|
| 逻辑或 |
🔴结合方向从左到右
13.
| 运算符 | 名称 |
|---|---|
| ? | 条件运算符 |
🔵 结合方向从右到左
14.
| 运算符 | 名称 | |
|---|---|---|
| = | 赋值 | |
| /= | 除后赋值 | |
| *= | 乘后赋值 | |
| %= | 取模后赋值 | |
| += | 加后赋值 | |
| -= | 减后赋值 | |
| <<= | 左移后赋值 | |
| >>= | 右移后赋值 | |
| &= | 按位与后赋值 | |
| ^= | 按位异或后赋值 | |
| = | 按位或后赋值 |
🔵 结合方向从右到左
15.
| 运算符 | 名称 |
|---|---|
| , | 逗号表达式 |
🔴结合方向从左到右