2.4 运算符与表达式
运算符指的是具有运算意义的符号,例如加法运算符(+),减法运算符(-)等,表达式,是C++编译器能读懂的计算机语句,由运算符和操作数按一定语法规则组合而成,根据运算符决定对操作数进行何种运算,并得出唯一的运算结果。
C++提供的运算符有以下几种:算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符、赋值运算符、逗号运算符、sizeof运算符及其他运算符。同时,按照操作数的个数,运算符又可以分为单目运算符(1个操作数)、双目运算符(两个操作数)和三目运算符(3个操作数)。
2.4.1 算术运算
C++中提供的算术运算符如表2.5所示。
注意
取余操作(%)要求两个操作数都为整型数,而且,取余操作(A%B)和除操作(A/B)都要求被除数B非0。
在算术运算中,单目运算符(-)优先级最高,其次为乘、除、取余操作,加减优先级最低,如果有括号,则括号内的运算先执行,这和数学式里的运算顺序基本一致。此外,C++要求算术运算符的两个操作数是数值类型,由于char型用其ASCII码表示,因此也可以将算术运算符应用于char型,代码2.10给出了算术运算符的使用范例。
代码2.10 算术运算符和算术表达式Arithmetic
<——————————————————文件名:example210.cpp—————————> 01 #include<iostream> 02 int main() 03 { 04 using namespace std; 05 int numA=2,numB=3;//声明两个int变量 06 cout<<"-2(3/2+2)-3="<<(-numA(numB/numA+numA)-numB)<<endl;//四则运算 07 cout<<"2/3="<<numA/numB<<endl;//除法运算 08 cout<<"2%3="<<numA%numB<<endl;//取模运算 09 return 0; 10 }
【代码解析】代码第6行,就是使用算术运算中的加、减、乘和除来求解的结果。
输出结果如下所示。
-2*(3/2+2)-3=-9 2/3=0 2%3=2
注意
使用整型数进行除法运算会带来较大的误差。
改写代码2.10,如下所示。
01 #include<iostream> 02 int main() 03 { 04 using namespace std; 05 int numA=2; 06 float numB=3; 07 cout<<"-2(3/2+2)-3="<<(-numA(numB/numA+numA)-numB)<<endl; 08 cout<<"2/3="<<(numA/numB)<<endl; 09 return 0; 10 }
【代码解析】代码第6行,定义的变量numB是浮点数类型,所以最后结果也与整数不同。
输出结果如下所示。
-2*(3/2+2)-3=-10 2/3=0.666667
可见,同样是除法运算,使用浮点型数和整型数有很大的不同,两个整型数进行算术运算,结果仍然是个整型数,不带小数,但只要操作数中有一个是浮点型数,运算结果就是个浮点型数,允许带小数,结果自然也就精确了。从本质上说,这涉及C++类型转换的问题,在本章稍后的章节中有关于这个专题的详细介绍。