C语言操作符

整理一下C语言操作符优先级,参考自《C和指针》

操作符

描述

用法示例

结果类型

结合性

是否控制

求值顺序

( )

聚组

(表达式)

与表达式相同

/

( )

函数调用

Rexp(Rexp,...,Rexp)

Rexp

L-R

[ ]

引用

Rexp [ Rexp ]

Loca

L-R

.

访问结构成员

Loca.member_name

Loca

L-R

->

访问 结构指针 成员

Rexp->member_name

Loca

L-R

++  --

后缀 自增 自减

Loca++

Rexp

L-R

!

逻辑非

!Rexp

Rexp

R-L

~

按位取反

~Rexp

Rexp

R-L

+ -

单目,正 

+Rexp

Rexp

R-L

++  --

前缀 自增 自减

++Loca

Rexp

R-L

*

间接访问

*Rexp

Loca

R-L

&

取地址

&Loca

Rexp

R-L

sizeof

取其 字节长度

sizeof Rexp

sizeof (类型)

Rexp

R-L

(类型)

类型转换

(类型)Rexp

Rexp

R-L

*  /  %

除 求余

Rexp * Rexp

Rexp

L-R

+  -

Rexp + Rexp

Rexp

L-R

<<  >>

左移 右动

Rexp << Rexp

Rexp

L-R

>  >=  <  <=

比较

Rexp > Rexp

Rexp

L-R

== !=

比较

Rexp == Rexp

Rexp

L-R

&

位与

Rexp & Rexp

Rexp

L-R

^

位异或

Rexp ^ Rexp

Rexp

L-R

|

位或

Rexp | Rexp

Rexp

L-R

&&

逻辑与

Rexp && Rexp

Rexp

L-R

||

逻辑或

Rexp || Rexp

Rexp

L-R

?:

条件操作符

Rexp ? Rexp : Rexp

Rexp

/

=

赋值

Loca = Rexp

Rexp

R-L

+= -= *= /= %=

...

Loca += Rexp

Rexp

R-L

<<= >>=

...左移

Loca <<= Rexp

Rexp

R-L

&= ^=|=

...位与

Loca &= Rexp

Rexp

R-L

,

逗号

rexp, ..., rexp

Rexp

L-R

 

=以赋值符号 = 为界。位于赋值操作符左侧的表达式,称之为左址,左址表示存储在内存中的可写对象,因此表达式的计算结果必须占有可写的内存空间,通过这个内存地址,就可以对内存进行操作这也就是为什么左可以被赋值的原因了

右值表达式,当一个符号或者常量放在赋值操作符的右边的时候,计算机就读取(并计算)他们的左址可写可读,显然也可以作为右值

L-valueL应理解成 Location,表示定位,地址;

R-valueR 应理解成 Read,表示读取数据。

结合性:一串操作符是从左向右依次执行,还是从右向左依次执行。

控制求值顺序:它们或能够保证某个子表达式能够在另一个表达式求值之前计算,或者跳过某个表达式。

posted @ 2022-03-31 16:44  神棍二叔  阅读(122)  评论(0编辑  收藏  举报