C++的运算符
C++的运算符十分丰富,使得C++的运算十分灵活方便。
1、算术运算符:加(+) 减(-) 乘(*) 除(/) 整除求余(%) 自加(++) 自减(--)
2、关系运算符:大于(>) 小于(<) 等于(==) 大于或等于(>=) 小于或等于(<=) 不等于(!=)
3、逻辑运算符:逻辑与(&&) 逻辑或(||) 逻辑非(!)
4、位运算符:按位左移(<<) 按位右移(>>) 按位与(&) 按位或(|) 按位异或(^) 按位取反(~)
5、赋值运算符:(=)
6、条件运算符:(?:)
7、逗号运算符:(,)
8、指针运算符:(*)
9、引用运算符和地址运算符:(&)
10、求字节数运算符:(sizeof)
11、强制类型转换运算符:((类型)或类型())
12、成员运算符:(.)
13、指向成员的运算符:(->)
14、下标运算符:([ ])
15、其它:(如函数调用运算符)
基本的算术运算符
+ :加法运算符,或正值运算符,如1+2,+3。
- :减法运算符,或负值运算符,如2-1,-3。
* :乘法运算符,如2*3。
/ :除法运算符,如3/2。
% :模运算符,或称求余运算符,%两侧均应为整型数据,如5%2的值为1。
需要说明,两个整数相除的结果为整数,舍去小数部分。但是,如果除数或被除数中有一个为负值,则舍入的方向是不固定的。如-5/3在有的C++系统上得到的结果为-1,有的C++系统则给出的结果为-2,多数编译系统采取“向零取整”的方法。如果参与+,-,*,/运算的两个数中有一个数为float型数据,则运算的结果是double型,因为C++在运算是对所有float型数据都按double型数据处理。
算术表达式
用算术运算符和括号将运算对象连接起来的、符合C++语法规则的式子,称为C++算术表达式。运算对象包括常量、变量、函数等。如(a+b)*5-c+'a'
运算符的优先级和结合性
在求解表达式时,先按运算符的优先级别高低依次执行。例如先乘除后加减,有括号先算括号中表达式。如果在一个运算对象两侧的运算符的优先级别相同,则按规定的“结合方向”处理。算术运算符的结合方向为“自左至右”,又称左结合性,即运算对象先于左面的运算符结合。
各类数值型数据混合运算
在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。float型数据在运算时一律先转换成double型,char和short型数据在运算时必先转换成int型。从低到高按照int→unsigned→long→double优先级进行计算。即表达式中有这四种数据,最终的结果为double型,没有double型数据,最终的结果为long型,依此类推。
自增和自减运算符
作用是使变量的值加1或减1,有以下四种用法:
i++ :在使用i之后,i的值加1。如i=3,执行i++时,i=3,执行i++后,i=4。
i-- :在使用i之后,i的值减1。如i=3,执行i--时,i=3,执行i--后,i=2。
++i :在使用i之前,i的值加1。如i=3,执行++i时,i=4,执行++i后,i=4。
--i :在使用i之前,i的值减1。如i=3,执行++i时,i=2,执行--i后,i=2。
强制类型转换运算符
在表达式中,不同类型的数据会自动的转换类型,以进行计算。有时程序编制者还可以利用强制类型转换运算符将一个表达式转换成所需类型。强制类型转换符的一般形式为 (类型名)(表达式)
如果要进行强制类型转换的对象是一个变量,该变量可以不用括号括起来;如果要进行强制类型转换的对象是一个包含多项的表达式,则表达式应该用括号括起来。类型名和表达式均使用括号括起来进行强制类型转换的形式原来C语言使用的形式,C++保留了这种写法,以利于兼容。
C++中增加了以下形式 类型名(表达式),类型名不加括号,而变量和表达式用括号括起来,这种形式类似函数调用。
需要注意的是,在强制类型转换时,得到一个所需类型的中间数据,但原来变量的类型未发生变化。
在运算时不需要用户指定,系统自动进行的类型转换,称为隐式类型转换;需要用户指定数据转换的操作称为强制类型转换。
赋值运算符
赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量。如a=3的作用是执行依次赋值操作或称赋值运算,把常量3赋给变量a,也可以将一个表达式的值赋给一个变量。
类型转换
如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时自动进行类型转换。
1、将浮点型数据赋给整型变量时,舍弃其小数部分,在内存中以整数形式存储。
2、将整型数据赋给浮点型变量时,数值不变,但以指数形式存储到变量中。
3、将一个double型数据赋给float变量时,需要注意数值范围不能溢出,如果溢出,就会出现溢出的错误。
4、字符型数据赋值给整型变量,将字符的ASCII码赋给整型变量。
5、将一个int,short或long型数据赋给一个char型变量,只将其低8位原封不动地送到char型变量,会发生截断。
6、将signed型数据赋给长度相同的unsigned型变量,将存储单元内容原样照搬
7、不同类型的整型数据间的赋值,归根结底就是一条:按存储单元中的存储形式直接传送。
复合赋值运算符
在赋值符“=”之前加上其它运算符,可以构成符合运算符。凡是二元(二目)运算符,都可以与赋值符一起组合成符合赋值。
C++可以使用以下几种复合赋值运算符:+=,-=,*=,/=,%=,<<=,>>=,&=,~=,|=,后5种为位运算符。
赋值表达式
由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值运算符”,一般形式为 变量=表达式。如a=5
对赋值表达式求解的过程是:先求赋值运算符右侧的表达式的值,然后赋给赋值运算符左侧的变量,一个表达式应该有一个值。
赋值运算符左侧标识符称为“左值”。并不是任何对象都可以作为左值,变量可以作为左值,表达式就不能作为左值,常变量也不能作为左值。
赋值运算符右侧的表达式称为“右值”,左值都可以作为右值。
赋值运算符按照“自右至左”的结合顺序执行。
C++将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其它语句中,如输出语句、循环语句等。如cou<<(a=b);赋值表达式需要用括号括起来。
逗号运算符
C++提供一种特殊的运算符,叫逗号运算符,又称为顺序求值运算符。一般表达式为 表达式1,表达式2
逗号表达式的求解过程是:先求解表达式1,再求解表达式2,整个逗号表达式的值是表达式2的值。如1+2,3+4的值是7。
需要注意,当逗号表达式的为a=3+4,a+5时,由于赋值运算符的优先级别高于逗号运算符,因此先计算赋值运算,这样整个逗号表达式的值为12。要实现先计算逗号表达式,需要将整个逗号表达式括起来。
逗号表达式的一般形式可扩展为 表达式1,表达式2,表达式3,...,表达式n 它的值为表达式n的值。