设为首页 加入收藏

TOP

2.3.7 算术操作符和表达式
2013-10-07 14:56:36 来源: 作者: 【 】 浏览:69
Tags:2.3.7 算术 操作 符和 表达式

2.3.7  算术操作符和表达式

C++(www.cppentry.com)程序中,可利用算术操作符合并变量和/或数字。这些操作符包括+(加)、-(减)、*(乘)和/(除)。例如,图2.1的程序用操作符*求两个变量值的积,结果放入等号左侧的变量:

  1. total_weight = one_weight * number_of_bars; 

所有算术操作符都可作用于两个int或者两个double,甚至允许一样一个。但是,确切的结果值及其类型取决于被合并的数字的类型。两个操作数(也就是两个数字)都是int,用算术操作符合并的结果也是int。一个(或两个)操作数是double,结果就会变成double。例如,假定变量base_amount和increase都是int,则以下表达式的结果也是int:
  1. base_amount + increase 

然而,其中任何一个是double,结果就是double。将以上表达式中的符号+换为符号-,*或者/,这一点同样成立。

结果类型的重要性可能超乎你的想象。例如,7.0/2有一个double类型的操作数,即7.0,所以结果是double值3.5。然而,7/2的两个操作数都是int类型,所以结果是int值3。即使结果表面上相等,但实际可能还是有区别。例如,6.0/2有一个double类型的操作数,即6.0,所以结果是double值3.0,它只是一个近似值。但是,6/2有两个int类型的操作数,所以结果是int值3,这是一个精确值。除法操作符是受参数类型影响最大的操作符。

使用除法操作符时,如果一个或两个操作数是double类型,结果是符合预期的。但是,为int类型的两个操作数使用除法操作符,只能获得除法运算结果的整数部分。也就是说,整数除法丢弃了小数部分。所以,10/3的结果是3(而不是3.3333…),5/2的结果是2(而不是2.5),11/3的结果是3(而不是3.6666…)。注意,这些数字没有进行四舍五入,小数部分会被直接丢弃,不管它有多大。

将操作符%应用于int类型的操作数,可以还原使用/对两个整数进行除法运算时丢失的信息。应用于int值时,两个操作符/和%将生成执行长除法时获得的两个数字(长除法是中学知识)。例如,17用5来除,商是3,余是2。/运算得到的是商,%得到的就是余。例如,以下语句:

  1. cout << "17 divided by 5 is " << (17/5) << endl;  // 商  
  2. cout << "with a remainder of " << (17%5) << endl;  // 余 

输出如下:
  1. 17 divided by 5 is 3  
  2. with a remainder of 2  

图2.5演示了将操作符/和%应用于int值时的情况。
 
图2.5  整数除法

向负int值应用/和%操作符的结果因C++(www.cppentry.com)实现而异。所以,为了保证程序的可移植性,只有在确定两个int都非负时,才为它们使用操作符/和%。

算术表达式中可加入合理的空白间距。可以在操作符和圆括号前后插入空格,当然也可以不加。只要易于阅读,加或不加可自由选择。

可以插入圆括号来指定运算顺序,如以下两个表达式所示:

  1. (x + y) * z  
  2. x + (y * z) 

对第一个表达式求值时,计算机首先使x和y相加,再将结果乘以z。对第二个表达式进行求值时,计算机首先使y和z相乘,再将结果加到x上。尽管数学公式中可以使用方括号和其他形式的括号,但在C++(www.cppentry.com)中是不允许的。C++(www.cppentry.com)只允许在算术表达式中使用圆括号来指定运算顺序。其他形式的括号留作其他用途。

如果省略圆括号,计算机将根据优先级规则来决定操作符(如+和*)的求值顺序。这些优先级规则与代数和其他数学课采用的规则相似。例如,对以下表达式求值时:

  1. x + y * z 

将首先执行乘法运算,再执行加法运算。但即使加或不加圆括号都不会改变运算顺序,除非是一些非常标准的情况(比如一连串的加法,或者在一个加法运算中嵌入一个简单的乘法),否则最好坚持用圆括号指定执行顺序。圆括号使表达式更容易理解,并能避免出错。附录2给出了完整的C++(www.cppentry.com)优先级规则。

视频讲解:Precedence and Arithmetic Operators

图2.6展示了常见算术表达式的一些例子,并给出了对应的C++(www.cppentry.com)表达式。

 
图2.6  算术表达式

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.4.3 陷阱:在该用==的时候错用.. 下一篇2.4.2 陷阱:连续的不等式

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Announcing October (2025-12-24 15:18:16)
·MySQL有什么推荐的学 (2025-12-24 15:18:13)
·到底应该用MySQL还是 (2025-12-24 15:18:11)
·进入Linux世界大门的 (2025-12-24 14:51:47)
·Download Linux | Li (2025-12-24 14:51:44)