逻辑运算符(2)

2008-02-23 05:29:41来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


if else if ... else 结构,转而执行后续语句(本例是执行 return 0;)。假如没有一个
条件为真,则执行最后那个 else 后面的“一条语句/复合语句”,然后继续执行后续语句
(本例是执行 return 0;)。

下面我们来总结一下这三个运算符的作用(exp 代表表达式):

exp1 && exp2:当 exp1 和 exp2 同时为真时,exp1 && exp2 为真。

exp1 || exp2:只要 exp1 和 exp2 当中有一个为真,则 exp1 || exp2 为真。
当然,exp1 和 exp2 同时为真时,exp1 || exp2 也为真。

!exp1:假如 exp1 为假,则 !exp1 为真;假如 exp1 为真,则 !exp2 为假。

例如:

2 > 5 && 1 > 0 为假,因为 2 > 5 为假。

1 > 2 || 4 < 8 为真,因为 4 < 8 为真。

!(2 < 5) 为假,因为 2 < 5 为真。

二、逻辑运算符的优先级

&& 的优先级比 || 高。他们俩的优先级都低于关系运算符,高于赋值运算符。! 的优先级很高,比乘除运算符的优先级还要高,和自增自减运算符(前置时)的优先级相同高。例如:

a > b && b > c || b > d

等同于

((a > b) && (b > c)) || (b > d)

假如您不想记住优先级的高低关系,完全没问题,能够不记。反正对于不确定的地方,加上括号就万无一失了。使用括号是很好的编程风格,这样就算代码的读者不太了解运算符的优先级,也能够看明白。


三、逻辑运算符的求值顺序

C 规定先对 && 或 || 左边的操作数进行运算,然后再对其右边的操作数进行运算。&& 和 || 都是序列点。假如 && 左边的表达式为假,则不再对其右边的表达式求值。只有当 && 左边的表达式为真时,才会对其右边的表达式求值。而对于 ||,假如其左边的表达式为真,则不再对其右边的表达式求值。只有当 || 左边的表达式为假时,才会对其右边的表达式求值。例如:

1 != 1 && 2 == 2 // 不会对 2 == 2 求值,因为 1 != 1 为假,故整个表达式为假
1 == 1 && 2 == 2 // 左右两边都需要值,整个表达式为真
1 == 1 || 2 == 2 // 不会对 2 == 2 求值,因为 1 == 1 为真,故整个表达式为真
1 != 1 || 2 == 2 // 要对 2 == 2 求值,因为 1 != 1 为假。又因为 2 == 2 为真,
// 故整个表达式为真
1 != 1 || 2 != 2 // 因为 1 != 1 和 2 != 2 都为假,故整个表达式为假

因为 && 和 || 都是序列点,所以使用任何符合标准的 C 编译器编译以下表达式的效果都是相同的:

i != 20 && (i j != 30) // 在对 i j != 30 求值之前,i 的值就已自增了
i != 20 || (i j != 30) // 在对 i j != 30 求值之前,i 的值就已自增了


四、iso646.h

考虑到某些电脑可能不支持输入 !、| 和 & 这三个字符(如键盘中没有这三个键),C99 新增了头文档 iso646.h,用于解决这个问题。包含这个头文档之后,我们就能够用 and 来代替 &&,用 or 来代替 ||,用 not 来代替 !。我们能够把上面的程式改成这样:

/*--------------------------------------------------------------
| 作者: Antigloss @ http://stdcpp.cn @ 蚂蚁的 C/C 标准编程
|
| 功能: 演示 and、or 及 not 的用法
-------------------------------------------------------------*/

#include <stdio.h>
#include <iso646.h>

int main(void)
{
int i_num;

printf("Please enter an integer: ");
scanf("%d", &i_num);

if ( not i_num ) /* 效果等同于 i_num == 0 */
{ /* 假如用户输入 0 */
printf("i_num got a value of zero.\n");
}
else if ( i_num >= 1 and i_num <= 9 )
{ /* 假如用户输入介于 1 到 9 之间(包括 1 和 9)*/
printf("i_num is between 1 and 9, inclusive.\n");
}
else if ( i_num < -9 or i_num > 9 )
{ /* 假如用户输入小于 -9 或大于 9 */
printf("i_num is less than -9 or greater than 9.\n");
}
else
{ /* 其他情况 */
printf("i_num is between -9 and -1, inclusive.\n");
}

return 0;
}

参考资料:C Primer 5th Edition


标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: Dev-C 调试方法简明图文教程

下一篇: if 语句嵌套