background image

                        

逻辑运算符和逻辑表达式

(一)逻辑运算符及其优先次序

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);