
4.3 布尔情景
根据某些条件是否得到了验证,一些运算符会产生值0
或1
。见表4.1。它们可以分为两类:比较和逻辑计算。
4.3.1 比较
在我们的示例中,我们已经看到了比较运算符==
、!=
、<
和>
。后两个在其操作数之间执行严格的比较,而<=
和>=
分别执行“小于或等于”和“大于或等于”比较。正如我们已经看到的,所有这些运算符都可以用于控制语句,但是它们实际上比这个更强大。
要点4.13 比较运算符返回值false
或true
。
请记住,false
和true
只是分别表示0
和1
的花哨的名称。因此,它们可以用于算术或数组索引。在下面的代码中,c
始终为1
,如果a
和b
相等,则d
为1
,否则为0
:

在下一个示例中,数组元素sign[
false
]
将保存largeA
中大于或等于1.0
的值的个数,而sign[
true
]
则保存小于1.0
的值的个数:

最后,还有一个标识符not_eq
,可以用来代替!=
。这个特性很少使用。它可以追溯到一些字符不能在所有计算机平台上正确显示的时代。要想使用它,必须包含文件iso646.h
。
4.3.2 逻辑
逻辑运算符对已经表示为false
或true
的值进行操作。如果它们不存在,则首先应用条件执行的规则(要点3.1)。运算符!
(非)在逻辑上对操作数进行非操作,运算符&&
(与)是逻辑与,而运算符||
(或)是逻辑或。表4.4汇总了这些运算符的结果。
表4.4 逻辑运算符

类似于比较运算符。
要点4.14 逻辑运算符返回值false
或true
。
同样,请记住这些值仅仅是0
和1
,因此可以用作索引:

这里,表达!!largeA[i]
使用了!
运算符两次,从而确保largeA[i]
被赋值为truth
值(要点3.4)。因此,数组元素isset[0]
和isset[1]
将分别保存等于0.0
和不等于的值的个数。

运算符&&
和||
有一个特殊的特性,称为短路计算C。这个野蛮的术语表示这样一个事实,如果第二个操作数对操作结果不是必需的,那么对它的计算可以省略:

这里,在执行过程中有条件地省略a/b
的计算,可以永远不会发生除0
的情况。等效的代码是
