当前位置:嗨网首页>书籍在线阅读

11-逻辑运算符细节

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

6.2.5 逻辑运算符细节

正如本章前面指出的,C++逻辑OR和逻辑AND运算符的优先级都低于关系运算符。这意味着下面的表达式

x > 5 && x < 10

将被解释为:

(x > 5) && (x < 10)

另一方面,!运算符的优先级高于所有的关系运算符和算术运算符。因此,要对表达式求反,必须用括号将其括起,如下所示:

!(x > 5)   // is it false that x is greater than 5
!x > 5     // is !x greater than 5

第二个表达式总是为false,因为!x的值只能为true或false,而它们将被转换为1或0。

逻辑AND运算符的优先级高于逻辑OR运算符。因此,表达式:

age > 30 && age < 45 || weight > 300

被解释为:

(age > 30 && age < 45) || weight > 300

也是说,一个条件是age位于31~44,另一个条件是weight大于300。如果这两个条件中的一个或全部都为true,则整个表达式为true。

当然,还可以用括号将所希望的解释告诉程序。例如,假设要用&&将age大于50或weight大于300的条件与donation大于1000的条件组合在一起,则必须使用括号将OR部分括起:

(age > 50 || weight > 300) && donation > 1000

否则,编译器将把weight条件与donation条件(而不是age条件)组合在一起。

虽然C++运算符的优先级规则常可能不使用括号便可以编写复合比较的语句,但最简单的方法还是用括号将测试进行分组,而不管是否需要括号。这样代码容易阅读,避免读者查看不常使用的优先级规则,并减少由于没有准确记住所使用的规则而出错的可能性。

C++确保程序从左向右进行计算逻辑表达式,并在知道答案后立刻停止。例如,假设有下面的条件:

x != 0 && 1.0 / x > 100.0

如果第一个条件为false,则整个表达式肯定为false。这是因为要使整个表达式为true,每个条件都必须为true。知道第一个条件为false后,程序将不判定第二个条件。这个例子非常幸运,因为计算第二个条件将导致被0除,这是计算机没有定义的操作。