欢迎来到天天文库
浏览记录
ID:44890471
大小:24.50 KB
页数:3页
时间:2019-11-01
《复合算术运算符》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、复合算术运算符现在我们来看看由几种运算符和包含混合数据类型的更复杂的表达式。优先权规则 算术表达式能够由许多常量、变量、运算符和括号组成,那么操作执行的次序是怎样的呢?例如,在赋值语句中avgTemp=FREEZE_PT+BOIL_PT/2.0;是FREEZE_PT+BOIL_PT首先被计算呢还是BOIL_PT/2.0首先被计算? 基本的算术运算符的运算顺序与数学的运算符顺序是一样的,按照优先权规则:最高优先级:单目+单目-中等优先级:*/%最低优先级:+-在上面的表达式例子中隐含着用括号一样:FREEZE_PT+(BOIL_PT/2.0)即
2、,我们首先用2除BOIL_PT然后加FREEZE_PT得到结果。 你能够使用括号改变求值的次序,在语句avgTemp=(FREEZE_PT+BOIL_PT)/2.0;中FREEZE_PT和BOIL_PT首先被加,然后它们的和再除以2。我们首先求括号内的子表达式的值,然后接下来再按运算符的优先权规则求值。 当一个算术表达式有几个具有同样优先权的双目运算符时,它们的结合次序是从左到右。表达式int1-int2+int3意味着(intl-int2)+int3,不是int1-(int2+int3)。另一个例子,我们使用表达式(float1+float
3、2)/float1*3.0首先求括号内的表达式的值,然后将得到的和除以float1再乘以3.0。下面是更多的一些例子。————————————————————表达式 值10/2*3 1510%3-4/2 -15.0*2.0/4.0*2.0 5.05.0*2.0/(4.O*2.O) 1.255.0+2.0/(4.0*2.0) 5.25———————————————————— 在C++中,
4、所有的单目运算符都有从右到左的结合性,例如,-+x意味着-(+x)而不是意味着(-+)x。类型的强制和类型的转换 整型值和浮点值被不同的存储在计算机存储器内,如果在一条赋值语句或算术表达式中我们将整数和浮点值混合在一起会发生什么情况?让我们首先看看赋值语句。 赋值语句如果你做如下声明intsomeInt;floatsomeFloat;赋值语句someFloat=12;似乎会存储整型值12到someFloat中,但是不是这样。计算机拒绝存储任何其它除浮点值外的值到someFloat中。编译器会插入额外的机器语言指令,首先将12转换为12.0然后
5、再将12.0存储到someFloat中。 这个隐含的(自动的)从一种数据类型的值转换为另一种数据类型的值的转换被称为类型强制。语句someInt=4.8;同样引起类型的强制。当浮点值被赋给int变量时,小数部分被截去,因此someInt被赋值为4。如果我们避免混合数据类型,对一些读程序的人来说,程序就不会出现上面两种赋值语句的混淆的情况。someFloat=12.O;someInt=4;类型转换是从一种数据类型值转换为另一种类型值的显式转换。 为了使我们的程序尽可能的清楚,我们可以使用显式类型转换。一个C++类型转换操作由数据类型名然后是用括
6、号括起来的表达式:someFloat=float(3somelnt+2);someInt=int(5.2/someFloat-anotherFloat);两种语句someInt=someFloat+8.2;someInt=int(someFloat+8.2);产生同样的结果。 注意,在将浮点值存储到一个int变量之前,有一种进行四舍五入而不是截去小数的好方法,下面给出了如何做:someInt=int(someFloat+0.5); 当someFloat包含4.7时,什么值存储到someInt中,再试一次,假如someFloat包含4.2,什么
7、值存储到someInt中。(这是假设someFloat是一个正数,用加0.5来四舍五入的技术) 在表达式中也可能有混合的数据类型:someIntsomeFloat4.8+someInt–3 这样的表达式被称为混合类型表达式。 无论什么时候,一个整型值和一个浮点值用运算符连接在一起,就隐含着类型强制的出现。 让我们检测计算机如何求表达式4.8+someInt–3的值,这里someInt包含值为2。首先,+运算符的操作数有混合类型,所以someInt被强制为2.0(这种转换只是暂时的,它不影响存储在someInt内的值)。进行加运算后,产生值
8、6.8。接下来减(-)运算符连接一个浮点值(6.8)和一个整型值(3),值3被强制为3.0,进行减运算,结果是浮点值3.8。 像赋值语
此文档下载收益归作者所有