设为首页 加入收藏

TOP

4.3 逻辑和关系运算符(2)
2013-10-07 16:29:21 来源: 作者: 【 】 浏览:109
Tags:4.3 逻辑 关系 运算

4.3  逻辑和关系运算符(2)

相等性测试与布尔字面值

如果想测试一个算术对象或指针对象的真值,最直接的方法就是将其作为if语句的条件:
 

  1. if (val) { /* . . . */ }        // 如果val是任意的非0值,条件为真  
  2. if (!val) { /* . . . */ }       // 如果val是0,条件为真 

在上面的两个条件中,编译器都将val转换成布尔值。如果val非0则第一个条件为真,如果val的值为0则第二个条件为真。

有时会试图将上面的真值测试写成如下形式:

  1. if (val == true) { /* . . . */ } // 只有当val等于1时条件才为真! 

但是这种写法存在两个问题:首先,与之前的代码相比,上面这种写法较长而且不太直接(尽管大家都认为缩写的形式对初学者来说有点难理解);更重要的一点是,如果val不是布尔值,这样的比较就失去了原来的意义。

如果val不是布尔值,那么进行比较之前会首先把true转换成val的类型。也就是说,如果val不是布尔值,则代码可以改写成如下形式:
 

  1. if (val == 1) { /* . . . */ } 

正如我们已经非常熟悉的那样,当布尔值转换成其他算术类型时,false转换成0而true转换成1(参见2.1.2节,第35页)。如果真想知道val的值是否是1,应该直接写出1这个数值来,而不要与true比较。

进行比较运算时除非比较的对象是布尔类型,否则不要使用布尔字面值true和false作为运算对象。

4.3节练习

练习4.8:说明在逻辑与、逻辑或及相等性运算符中运算对象求值的顺序。

练习4.9:解释在下面的if语句中条件部分的判断过程。

  1. const char *cp = "Hello World";  
  2. if (cp && *cp) 

练习4.10:为while循环写一个条件,使其从标准输入中读取整数,遇到42时停止。

练习4.11:书写一条表达式用于测试4个值a、b、c、d的关系,确保a大于b、b大于c、c大于d。

练习4.12:假设i、j和k是三个整数,说明表达式i!=j<k的含义。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.3 逻辑和关系运算符(1) 下一篇4.4 赋值运算符(1)

评论

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