C语言运算符优先级(大全)
文章目录
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.(逻辑运算符)
| 运算符 | 名称 |
|---|---|
| && | 逻辑与 |
| (采用短路运算):如果前面一个运算式返回为0,则后面的运算式不运算 |
?结合方向从左到右
12.(逻辑运算符)
| 运算符 | 名称 |
|---|---|
| || | 逻辑或 |
| (采用短路运算):如果前面一个运算式返回为1,则后面的运算式不运算 |
?结合方向从左到右
13.(条件运算符)
| 运算符 | 名称 |
|---|---|
| ?: | 条件运算符 |
? 结合方向从右到左
14.(赋值运算符)
| 运算符 | 名称 |
|---|---|
| = | 赋值 |
| /= | 除后赋值 |
| *= | 乘后赋值 |
| %= | 取模后赋值 |
| += | 加后赋值 |
| -= | 减后赋值 |
| <<= | 左移后赋值 |
| >>= | 右移后赋值 |
| &= | 按位与后赋值 |
| ^= | 按位异或后赋值 |
| |= | 按位或后赋值 |
? 结合方向从右到左
15.(逗号运算符)
| 运算符 | 名称 |
|---|---|
| , | 逗号表达式 |
?结合方向从左到右
o = (a = 2 * 6, a * 3, a + 5);
//o=17,先计算括号内的表达式,将结果赋值给o
//(a*3不作为赋值语句(可以忽略),逗号表达式的结果o与最后一个表达式的结果有关系)
o = a = 2 * 6, a * 3, a + 5;
//o=12,直接将第一个表达式结果赋值给o