2.5.2 算术运算符和算术表达式(2)
4. 自增、自减运算符
自增1运算符记为++,其功能是使变量的值自增1;自减1运算符记为--,其功能是使变量值自减1。自增1和自减1运算符均为单目运算,都具有右结合性。使用如表2-9所示的算术运算符来进行自增自减运算。
表2-9 自增自减运算符
|
符 号
|
用 法
|
含 义
|
|
++
|
++a或a++
|
前缀或后缀加1操作
|
|
--
|
--a或a--
|
前缀或后缀减1操作
|
一般语法表明有两种使用++和--运算符的方式。
(1) 前缀方式:即运算符在运算量的左边,则运算量的值在其传送给表达式之前先做加1或减1操作。这就是所谓的"先增值(加1)后引用"或"先减值(减1)后引用"。
- ++i //i自增1后再参与其他运算
- --i //i自减1后再参与其他运算
(2) 后缀方式:即运算符在运算量的右边,则运算量的值在传送给表达式之后才改变(即做加1或减1操作)。这就是所谓的"先引用后增值(加1)"或"先引用后减值(减1)"。
- i++ //i参与运算后,i的值再自增1
- i-- //i参与运算后,i的值再自减1
如果++或--一个语句中的唯一运算符,则使用前缀形式和后缀形式的运算符实际上没有区别。
如果把++或--引用到表达式中,使用前缀方式和后缀方式产生的结果是有很大区别的。
- int i=5,x,y;
- x=++i; //相当于x=i=i+1
- y=i;
执行结果为:x的值是6,i的值6,y的值是6。
- int i=5,x,y;
- x=i++; //相当于x=i;ii=i+1
- y=i;
执行结果为:x的值是5,i的值是6,y的值是6。
增量和减量运算符的结合方向是"从右到左",其运算对象只能是整型变量而不能是常量或表达式。例如,5++或(x+y)++都是不合法的。
5. 各类数值型数据之间的混合运算
在设计C++语言程序时,在表达式中经常会遇到不同类型的运算量之间的运算问题,如整型、单精度型、双精度型数据进行混合运算等。遇到这些情况时,C++提供了两种类型转换方式把运算量转换成相同的数据类型,然后再进行运算。转换按数据长度增加的方向进行,以保证精度不降低。转换的方法有两种,一种是自动转换;一种是强制转换。
(1) 自动转换
自动数据类型转换也称为隐式类型转换,简称自动转换或隐式转换。隐式类型转换发生在不同数据类型的量混合运算时,由编译器自动完成的类型转换。当编译器遇到不同类型的数据参与同一运算时,会自动将它们转换为相同类型后再进行运算,赋值时会把所赋值的类型转换为与被赋值变量类型一样。自动转换规则为由少字节类型向多字节类型转换,即:
① +、-、*、/运算的两个数中有一个数为float或double型,结果是double型。系统将float型数据都先转换为double型,然后进行运算。
② 如果int型与float或double型数据进行运算,先把int型和float型数据转换为double型,然后进行运算,结果是double型。
③ int型和long型运算时,先把int型转换成long型后再进行运算。
④ 所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。
⑤ 字符型数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算。
⑥ char型和short型参与运算时,必须先转换成int型。