逻辑运算符和逻辑表达式
(一)逻辑运算符及其优先次序
1.
&& (逻辑与) 相当于其他语言中的 AND
2.
|| (逻辑或) 相当于其他语言中的 OR
3.
! (逻辑非) 相当于其他语言中的 NOT
例:a&&b 若 a,b 为真,则 a&&b 为真。
a||b 若 a,b 之一为真,则 a||b 为真。
!a 若 a 为真,则!a 为假。
优先次序:
•
“
逻辑运算符中的 &&” “
和 ||”
“
低于关系运算符, !”高于算
术运算符
•
逻辑非>算数运算符>关系运算符>&&和||>赋值运算符>逗号运
算符
(二)逻辑表达式
•
用逻辑运算符将关系表达式或逻辑量连接起来的式子就
是逻辑表达式
•
“ ” “ ”
逻辑表达式的值应该是一个逻辑量 真 或 假 。
“ ”
任何非零的数值都被认作 真
例:设 a=4,b=5
:
!a 的值为 0 a&&b 的值为 1
a||b 的值为 1 !a||b 的值为 1
4&&0||2 的值为 1
例:5>3&&8<4-!0 (从左向右运算)
表达式值为 0
1)!0=1 2)4-1=3 3)5>3 值为 1 8<3 值为 0
4)1&&0 值为 0
(三)短路现象
在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。
(1)a&&b&&c 只有 a 为真时,才需要判断 b 的值,只有 a 和 b 都为真时,
才需要判断 c 的值。
(2)a||b||c 只要 a 为真,就不必判断 b 和 c 的值,只有 a 为假,才判断
b。a 和 b 都为假才判断 c
例:int m=10,n=12,a=1,b=3,c=14,d=7,i,j;
<1>i=(m=a>b)&&(n=c>d); printf(“%d,%d\n”,m,n); /*输出值
0,12 */
j=(m=a>b)||(n=c>d); printf(“%d,%d\n”,m,n);
/*输出值:1,12 */
printf(“%d,%d\n”,i,j);
输出值:0,1
<2>i=(m=a<b)&&(n=c>d); printf(“%d,%d\n”,m,n);
/*输出值:1,1 */
j=(m=a<b)||(n=c>d); printf(“%d,%d\n”,m,n);