C++复习之路四——表达式

一、表达式的概念

表达式是由一个或多个运算对象组成,运算对象之间可以通过运算符连接起来。

二、复合表达式

复合表达式是指含有两个或者多个运算符的表达式。

【注意】复合表达式进行运算的时候要注意运算符的优先级

三、算数运算符的优先级表


算数运算符(左结合律)
运算符 功能 用法

+

-

一元正号

一元负号

+ expr

- expr

*

扫描二维码关注公众号,回复: 25500 查看本文章

/

%

乘法

除法

求余

expr * expr

expr / expr

expr % expr

+

-

加法

减法

expr + expr

expr - expr

表中的算数运算符的优先级从上往下依次减小!以上的运算符都满足 左结合律,所以 当优先级相同的时候,从左往右依次进行计算
四、逻辑运算符和关系运算符

  逻辑运算符和 关系运算符  
结合律 运算符 功能 用法
逻辑非 ! expr

<

<=

>

>=

小于

小于等于

大于

大于等于

expr < expr

expr <= expr

expr > expr

expr  >= expr

==

!=

相等

不相等

expr == expr

expr != expr

&& 逻辑与

expr && expr

|| 逻辑或 expr || expr

【注意】以上的9种运算符除了逻辑与(&&)和逻辑或(||)之外都没有规定运算顺序。

逻辑与、逻辑或的运算顺序

逻辑与:当且仅当左侧运算对象为真时才对右侧运算对象求值。

逻辑或:当且仅当左侧运算对象为假时才对右侧运算对象求值。

五、赋值运算符

赋值运算符满足右结合律

赋值运算符的优先级比较低,低于关系运算符。

【注意】切勿混用赋值运算符(=)和相等运算符(==)!如果混用发生的错误是不容检查出来的。

if(i == j)
{
    /*相应的操作*/
}

判断i和j是否相等,如果相等就进行相应的操作。否则不会进入if条件语句。

if(i = j)
{
    /*相应的操作*/
}

这个是把j的值赋值给i,只要j的值不等于0,就可以进入if条件语句进行相应的操作。

六、递增和递减运算符

递增运算符(++)递减运算符(--),这两个运算符分别为对象进行加一,减一操作。

它们有两个版本,一个是前置版本(++i),还有一个后置版本(i--)

先来看一下这两个版本有什么区别

前置版本:

int i = 0, j;
j = ++ i; // j = 1 , i = 1;

后置版本:

int i = 0, j;
j = i++;  // j = 0, i = 1;
通过以上的例子我们可以知道, 前置版本返回的是 递增(或递减)之后的值,但是 后置版本返回的是 递增(或递减)之前的值。

【注意】在相同的条件下前置版本的效率通常高于后置版本的。因为后置版本需要将原始的值保存下来,需要一个临时变量,但是前置版本值接就是返回递增(或递减)之后的值,不需要创建一个临时变量,所以效率会高一点。

混用解引用运算符和递增运算符

来看一个例子 

*p++;

【注意】后置版本的优先级高于解引用运算符,所以以上的表达式可以写成这样*(p++); 这个表达式首先将p的值加一, 然后返回p的初始值的副本作为其结果,然后*解引用的就是p未加之前的值

七、sizeof运算符

sizeof运算符返回的是一条表达式或者一个类型名字所占的字节数。sizeof运算符满足右结合律。

八、逗号运算符

逗号运算符含有两个运算对象,按照从左向右的顺序依次求值。

【注意】逗号运算符规定了运算对象的求值顺序。

首先对左侧的表达式求值,然后将求值结果丢弃,逗号运算符的真正结果是右侧表达式的值。

猜你喜欢

转载自blog.csdn.net/y____xiang/article/details/79946467