zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C语言运算符的优先级和结合性

C语言 结合 运算符 优先级
2023-09-14 09:15:38 时间

刚学习C语言的同学看到优先级和结合性往往是一脸懵懂。

其实,所谓优先级,就是表达式中有不同的运算符,我们该就先计算哪一个?例如,a+b*c,先计算乘法,再计算加法。

           所谓结合性,就是表达式中的相同类型的运算符,先计算哪个,是从左往右,还是从右往左。例如 a=b=c;,先就按右边的赋值,再计算左边的赋值

 

优先级:

运算符的优先级是很难记忆的,尤其对于我们的新同学。我们可以在希望优先计算的部分上加上括号,让它优先计算。

例如:2+3*4+5  希望先计算2+3,4+5,然后相乘的,我们只需要 (2+3)*(4+5)

实在需要用到优先级表的,可以自行查表。

(表格来自 https://blog.csdn.net/steedhorse/article/details/5903974

优先级运算符名称或含义使用形式结合方向说明
1[]数组下标数组名[常量表达式]左到右 
()圆括号(表达式) 
函数名(形参表)
.成员选择(对象)对象.成员名 
->成员选择(指针)对象指针->成员名 
2-负号运算符-表达式右到左单目运算符
(类型)强制类型转换(数据类型)表达式 
++自增运算符++变量名单目运算符
变量名++
--自减运算符--变量名单目运算符
变量名--
*取值运算符*指针变量单目运算符
&取地址运算符&变量名单目运算符
!逻辑非运算符!表达式单目运算符
~按位取反运算符~表达式单目运算符
sizeof长度运算符sizeof(表达式) 
3/表达式 / 表达式左到右双目运算符
*表达式*表达式双目运算符
%余数(取模)整型表达式%整型表达式双目运算符
4+表达式+表达式左到右双目运算符
-表达式-表达式双目运算符
5<<左移变量<<表达式左到右双目运算符
>>右移变量>>表达式双目运算符
6>大于表达式>表达式左到右双目运算符
>=大于等于表达式>=表达式双目运算符
<小于表达式<表达式双目运算符
<=小于等于表达式<=表达式双目运算符
7==等于表达式==表达式左到右双目运算符
!=不等于表达式!= 表达式双目运算符
8&按位与表达式&表达式左到右双目运算符
9^按位异或表达式^表达式左到右双目运算符
10|按位或表达式|表达式左到右双目运算符
11&&逻辑与表达式&&表达式左到右双目运算符
12||逻辑或表达式||表达式左到右双目运算符
13?:条件运算符表达式1? 表达式2: 表达式3右到左三目运算符
14=赋值运算符变量=表达式右到左 
/=除后赋值变量/=表达式 
*=乘后赋值变量*=表达式 
%=取模后赋值变量%=表达式 
+=加后赋值变量+=表达式 
-=减后赋值变量-=表达式 
<<=左移后赋值变量<<=表达式 
>>=右移后赋值变量>>=表达式 
&=按位与后赋值变量&=表达式 
^=按位异或后赋值变量^=表达式 
|=按位或后赋值变量|=表达式 
15,逗号运算符表达式,表达式,…左到右 

结合性

同种运算符,先计算哪个,需要用到结合性,

例如  a=b=c=3+2 ;   

语句中用到2种运算符, 赋值运算符=,和加法+运算符,

查表可知道,=的优先级为14,+的优先级别为4,所以先计算3+2得到5,  式子变为 a=b=c=5

由于赋值运算符的结合性为 从右到左,所以先计算左边的,再计算右边的,所以计算顺序为:

a)c=5  ,c的值变为5,这个赋值表达式的值也为5,

b)b=5    b的值变为5,这个赋值表达式的值也为5

c)a=5   a的值变为5,