JackIO 发表于 2015-1-10 15:39:47

【小学】[Class0x04] C++的运算符和表达式

本帖最后由 ReverseFuture 于 2015-1-10 15:44 编辑

      

      在上一节中我们共同学习了C++中的变量和基本数据类型以及它们的用法。在这一节中我们共同学习下C++的运算符和表达式。

一、运算符
      运算符和表达式是编程语言的基本组成部分。运算符是表示实现某种运算的符号,表达式是运算符和操作数的组合。C++中提供了丰富的运算符,使得使用C++比较方便。C++中包含了C语言中的运算符和表达式,并且又增加了一些新的运算符。如下所示:

[*]::作用域运算符
[*]new动态分配内存单元运算符
[*]delete删除动态分配的内存单元运算符
[*]*和->*成员指针选择运算符


      除了上面几种运算符之外,C++主要提供了下面的一些运算符:算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符、赋值运算符、逗号运算符、sizeof运算符以及其他运算符。不同的运算符需要指定的操作数个数不同,根据运算符所需操作数个数的不同,可以将运算符分为三种:单目运算符(一个操作数)、双目运算符(两个操作数)和三目运算符(三个操作数)。

1. 算术运算符
      C++中支持的算术运算符符号、名称、功能及相关示例如下表所示(假设表中int型变量a=7,b=3):


      大家可以根据上表中自行判断哪些运算符是单目运算符,哪些是双目运算符。此外,表中的三个运算符我们需要单独拿出来详细介绍:单目运算符-、++、--。

[*]单目运算符-:单目-运算符相当于数学中的负号,即用于表示一个数的相反数。
[*]自增运算符++:表中的自增运算符在操作数的后面,这种用法(a++)表示变量a+1,然后再将这个结果赋值给变量a。其实自增运算符还有另外一种用法,那就是运算符在操作数的前面(++a这种形式),在简单的表达式中,其结果与a++一样,复杂情况下,我们再其他地方再专门学习。
[*]自减运算符--:使用方法同自增运算符完全一样。


      那么问题来了,如果我要求表达式int d=a*b+c/a中d的值,那么应该首先计算哪个部分呢?这里就需要根据运算符的优先级进行计算了,上面一些运算符的优先级为:
单目运算符 > *或/ > % > +或-
      所以,上面变量d的值计算顺序应该是:先计算a*b,然后计算c/a,然后将两个中间结果相加,最终得到变量d的值。示例程序及运行结果如下,根据运行结果大家可以自行分析,并可以修改代码,看看结果如何。



2. 赋值运算符
      其实赋值运算符我们前面已经使用了很多次了,只是未正式介绍它而已。赋值运算符是C++程序中使用非常普遍的基本运算符之一,它可以用来为一个变量赋值。其说明语句的一般形式为:
变量名 = 变量值 或 计算表达式;

      其中:变量值或计算表达式的结果值类型必须与变量的值类型相同,“=”为赋值运算符,赋值运算的运算规则是先计算“=”右边的计算表达式的值,然后将该值赋给“=”左边的变量。例如:      

         
      此外,在程序中经常出现类似s=s+i这样的赋值语句,C++中允许采用更简洁的形式写成s+=n,这种就形成了复合赋值运算符。复合赋值运算符示例程序及运行结果如下:


3. 关系运算符
      关系运算符是双目运算符,其作用是对两个操作数进行大小比较,其运算结果为布尔型数据,若关系成立则为true,否则为false。C++中,支持的关系运算符主要有下面表中所示的6种。


      上面表中的前四种运算符优先级相同,它们的优先级高于后两种运算符。此外,关系运算符的优先级低于算术运算符,其结合性是从左到右的。示例程序如下图:

4. 逻辑运算符
      C++提供了三种逻辑运算符,单目运算符有逻辑非(!)、双目运算符有逻辑与(&&)和逻辑运算符或(||)。其运算结果类型为布尔型数据,其值为true或false。这三种逻辑运算法使用方法如下表。


      以上表中的逻辑运算符的优先级从上到下依次从高到低。!(逻辑非)的优先级比算术运算符和关系运算符高,而&&(逻辑与)、||(逻辑或)的优先级低于关系运算符。此外,逻辑运算符的结合性是从左到右。示例程序如下图:

5. 条件运算符
      C++中还支持条件运算符,条件运算符是一个比较特殊的运算符,它是一个三目运算符,说明语句的一般形式为:
表达式1?表达式2:表达式3
      该表达式的使用规则如下:

[*]表达式1的结果必须为布尔类型。
[*]表达式执行的顺序为:先求表达式1的值,若值为true,则求表达式2的值,并且将表达式2的值作为最终的结果,而不再求取表达式3的结果;若表达式1的值为false,则直接求表达式3的值,并且将表达式3的值作为最终的结果,而不再求取表达式2的结果。
[*]条件运算符优先级高于赋值运算符,低于逻辑运算符,其结合性为从右到左。

      示例程序及运行结果如下图:


6. 逗号运算符
      逗号运算符可以使多个表达式写在同一行上,从而大大简化了程序,其一般形式为:
表达式1,表达式2,表达式3 ……;
      该表达式的使用规则如下:

[*]表达式执行顺序是:先求解表达式1,再求解表达式2,再求解表达式3,直到求解到最后一个表达式,其最终结果为最后一个表达式的值。
[*]逗号运算符是优先级最低的运算符,其结合性为从左到右。

      逗号运算符示例程序及运行结果如下图,大家可以好好分析一下,为什么会是这个结果。


7. 位运算符
      C++中还有位运算符,可以对数据进行位运算。C++中包含了支持数据位运算的6种位运算符,如下表所示:


      说明:位运算符的优先级低于算术运算符,高于逻辑运算符&&、||。位运算符的结合性除了单目运算符按位取反是从右到左,其余双目运算符都是从左到右。

8. sizeof运算符
      C++中提供了sizeof运算符,用来求取C++中不同类型的数据在内存中占用的字节个数。使用方法为:
sizeof(类型名或表达式)
      示例代码为:


9. 运算符优先级
      运算符的优先级决定了在表达式中各个运算符执行的先后顺序。同一优先级的运算符级别相同,运算次序由结合方向决定,不过使用小括号可以改变运算符的顺序。C++中,运算符的优先级一般分为15级,具体信息如下表所示。




二、表达式
      表达式是由运算符和操作数组成的式子,运算符就是我们上面学过的运算符,操作数包含了变量、常量、函数和其他一些标识符。C++中常见的表达式有下面几种:

[*]算术表达式。例如,a+4/2
[*]关系表达式。例如,’m’>’x’
[*]逻辑表达式。例如,a&&7
[*]条件表达式。例如,a>5?a++:a—
[*]赋值表达式。例如,a=12
[*]逗号表达式。例如,a+9,a-3,a++

      表达式的具体使用情况,在上面学运算符的时候所给出的示例程序中,在使用运算符所给出的那些程序语句中已经给出了表达式的使用情况,所以这里不再赘述。

结语
      这一节我们就暂时学在这里。下一节我们将学习相对有点系统性的东西--程序控制结构。



本节所有示例源代码下载:
百度网盘http://pan.baidu.com/s/1ntJskdF
验证码s8oe


—最小化 发表于 2015-7-29 15:25:29

页: [1]
查看完整版本: 【小学】[Class0x04] C++的运算符和表达式