C语言运算的优先级别和结合方向表是什么的?

Python026

C语言运算的优先级别和结合方向表是什么的?,第1张

优先级和结合性

C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。

而在一个运算量两侧的运算符优先级相同时,

则按运算符的结合性所规定的结合方向处理。

C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合,

执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。

最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。

C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。

运算符的种类C语言的运算符可分为以下几类:

1.算术运算符

用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。

2.关系运算符

用于比较运算。包括大于(>)、小于(<)、等于(==)、

大于等于(>=)、小于等于(<=)和不等于(!=)六种。

3.逻辑运算符

用于逻辑运算。包括与(&&)、或(||)、非(!)三种。

4.位操作运算符

参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。

5.赋值运算符

用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。

6.条件运算符

这是一个三目运算符,用于条件求值(?:)。

7.逗号运算符

用于把若干表达式组合成一个表达式(,)。

8.指针运算符

用于取内容(*)和取地址(&)二种运算。

9.求字节数运算符

用于计算数据类型所占的字节数(sizeof)。

10.特殊运算符

有括号(),下标[],成员(→,.)等几种。

1.a%=4-1;<==>a%=(4-1)<==>a%3=2

2.从右向左算, a=a*3 所以a=6a=a-6 所以a=0a=a*0 所以a=0a=a+0所以a=0

3.逻辑右移, 逻辑左移都存在,以下举例(为方便使用char类型,short,int 类似):

char cc = 1//1(00000001)

cc = cc>>1//1(00000000)

cout<<int(cc)<<endl

输出为:0

cc = 3//00000011

cc = cc>>1//00000001,右边1溢出

cout<<int(cc)<<endl

输出为:1

cc = 128//(10000000)

cc = cc>>1//(11000000)负数右移时,符号位不变,所以有两个1

cout<<int(cc)<<endl

输出为:-64

unsigned char cc=128

cc = cc>>1//(01000000)无符号数右移时,因为不存在符号位,只有一个1

cout<<int(cc)<<endl

输出为:64

位移可用于计算2的乘除法,计算速度优于*,/运算,但可读性差,例如:

int i = 1

i = i<<3//等价于 i = i*2*2*2

i = i>>1////等价于 i = i/2