汉扬编程 编程大纲 C\\C++语言4|表达式与运算符

C\\C++语言4|表达式与运算符

表达式是由运算符(包括括号)、操作数(常量、变量、函数等,是一个操作符操作于其上的数)按照一定的规则组成的式子;可以将常量、变量和函数认为是最简单的表达式。表达式可以嵌套,每个表达式都有一个值。在计算时要考虑运算符的优先级、结合性及数据类型的转换;计算机中的表达式都写在一行中。表达式有算术、赋值、关系、逻辑、条件和逗号等。在表达式的后边加个分号就是表达式语句。除了控制语句外,几乎都是表达式语句。如:

C\\C++语言4|表达式与运算符

算术表达式:用于算术计算;赋值表达式:右值赋值给左值;关系表达式:表达一些比较简单的关系;逻辑表达式:表达一些比较复杂的关系,一般使用逻辑运算符来连接关系表达式;条件表达式:\”?:\”表达式,if else语句的简单表达。常见操作符及使用:

C\\C++语言4|表达式与运算符

1 操作符的优先级、结合性C语言的数据类型是指对数据按某种规则所进行的分类。运算符是说明特定操作的符号,是构造表达式的工具。

要理解由多个操作符组成的表达式,必须先理解操作符的优先级、结合性,理解操作数的求值顺序。

运算符的结合性与优先级:如自增自减、赋值运算符,是从右到左;算术运算符、关系运算符,是从左到右。

结合性规定了具有相同优先级的操作符如何分组。我们已经遇到过涉及结合性的例子。其中之一使用了赋值操作的右结合性,这个特性允许将多个赋值操作串接起来:

ival = jval = kval = lval // right associative,starting from right(ival = (jval = (kval = lval))) // equivalent, parenthesized version该表达式首先将 lval 赋给 kval ,然后将 kval 的值赋给 jval ,最后将 jval 的值再赋给 ival。

另一方面,算术操作符为左结合。表达式

ival * jval / kval * lval // left associative(((ival * jval) / kval) * lval) // equivalent, parenthesized version先对 ival 和 jval 做乘法操作,然后乘积除以 kval,最后再将其商与 lval 相乘。

一元操作符和含等号=(赋值操作)的运算符大都是右结合操作符,除此以外,都是左结合(从左至右)。

2 逻辑表达式的短路求值int i=6;int j=1;if(i>0 || (j++)>0)j+=5;j++的计算会被忽略,对于||,如果左边的条件表达式为真,右边的条件表达式不管是真还是假,整个表达式都是真,这也就是短路求值,只有在左边条件表达式不确定整个逻辑表达式的结果时,才会计算右边的条件表达式,这在一定程度上增加了效率,但也可能带来了一些无法预料的错误。当用||连接两个条件表达式时,适合将可能性小的表达式放在左边先计算。

if(i<0 && (j++)>0)j+=5;j++的计算会被忽略,对于&&,如果一个为假,其他不管是真还是假,整个表达式是假,适合将可能性大的表达式放在左边先计算;

3 表达式中的自动类型转换整型与整型数运算,结果为整型,如 5 / 2 = 2 整型与浮点数运算,结果为浮点数,如5 / 2.0 = 2.5 字符与整型数运算,结果为整型。字符与浮点数运算,结果为浮点数。浮点数与浮点数运算,结果为浮点数。4 逻辑表达式使用关系运算符不能够清晰地描述更为复杂的逻辑关系,因为一个复杂的逻辑通常会包含多个小的逻辑关系。

如果我们的逻辑更为复杂,有多个逻辑条件,则代码中需要多个嵌套的if语句。为了使用计算机语言简化逻辑关系的描述,计算机语言的专家们提出了逻辑运算符的概念。逻辑运算符主要是实现了人类语言中并且、或者等连词在计算机中的表示。使用逻辑运算符可以连接关系表达式以构成复杂的逻辑表达式。C++中共有3种逻辑运算符,分别为“&&”、“||”和“!”。其中“&&”表示逻辑与运算符,也就是“并且”的含义,当两个表达式同时为真,其结果为真,否则为假。“||”表示逻辑或运算符,即“或者”的含义,当两个表达式中有一个表达式为真,结果为真,否则为假。“!”表示逻辑或运算符,即当表达式的值为真,结果为假,当表达式的值为假,其结果为真。

构成逻辑表达式的运算符有关系运算符(&&、||、!)和逻辑运算符(>、>=、<、<=、==、!=等),单独的关系运算符构成的关系表达式是简单的逻辑表达式,逻辑运算符用于连接关系表达式,可以构成复杂的逻辑表达式。C语言逻辑运算的结果是:真与假(1与0)。

5 空语句表达式以分号“;“结尾,单独的一个分号可以构成一条空语句:

while((*pdst++=*psrc++)!=\’\\0\’);当在一个控制结构的条件或逻辑表达式中完成了所需要的操作时,可以使用空语句(同时,控制结构也要求有语句体)。

空语句要避免以下错误;

while((*pdst++=*psrc++)!=\’\\0\’); //不小心加的分号{//以下块语句的执行并不是按上述的条件表达式的判断来执行的,而是顺序执行一次//……}6 逗号表达式逗号表达式是一组由逗号分隔的表达式,逗号表达式从左向右计算。逗号表达式的结果是其最右边表达式的值。如果最右边的操作数是左值,则逗号表达式的值也是左值。此类表达式通常用于for循环,用于初始或更新多个用于条件判断的变量。

逗号表达式,从左往右计算,结果是最右边表达式的值,如:

y=(x=2,x+=8,x+12),x+x;结果是:x=10, y = 20

7 表达式计算的内部实现根据运算符在表达式中的位置,一般有三种表示方法:中序法(我们日常一般的写法),前序法,后序法(运算符在操作数和前面)。对于中序法因为运算符的优先级问题,计算机在处理上较为复杂,所以一般会将中序法转化为前序或后序法。后序法只需要一个堆栈缓存器(前序法需要两个)。

转换的方式有:括号转换法(先用括号把中序法表达式的运算符优先级分出来,再进行运算符的移动。)、堆栈法;

-End-

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/mianfei/6699.html

Linux系统编程003-系统调用、API、标准C库

C\\C++语言4|表达式与运算符

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部