文章目录

  • C语言运算符优先级(大全)
    • C语言运算符优先级(大全)
      • 1.(后缀运算符)
      • 2.(一元运算符)
      • 3.(乘除运算符)
      • 4.(加减运算符)
      • 5.(位移运算符)
      • 6.(关系运算符)
      • 7.(相等运算符)
      • 8.(位运算符)
      • 9.(位运算符)
      • 10.(位运算符)
      • 11.(逻辑运算符)
      • 12.(逻辑运算符)
      • 13.(条件运算符)
      • 14.(赋值运算符)
      • 15.(逗号运算符)

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