1.逻辑运算符及其优先次序
关系运算符所能反映的是两个表达式之间的大小关系,而逻辑运算符则是用于求条件式的逻辑值,用逻辑运算符将关系表达式或逻辑量连接起来的就是逻辑表达式了。也许你会对为什么“逻辑运算符将关系表达式连接起来就是逻辑表达式了”这一个描述有疑惑的地方。其实在前面部分已经说过,用关系运算符的运算结果只有“0”和“1”两种,也就是逻辑的真和假,换句话说也就是逻辑量,而逻辑运算符就用于对逻辑量运算的表达。
图4-4 运算符优先级
C语言中提供了3种逻辑运算符:
1)&& “与”运算
2)|| “或”运算
3)! “非”运算
与运算符“&&”和或运算符“||”均为双目运算符,具有左结合特性。非运算符“!”为单目运算符,具有右结合特性。
逻辑运算符和其他运算符优先级的关系如图4-4所示。
“&&”和“||”低于关系运算符,“!”高于算术运算符。
同样逻辑运算符也有优先级别,从高到低排列,依次如下:!(逻辑非)→&&(逻辑与)→||(逻辑或),其中,逻辑非的优先级最高,逻辑或的优先级最低。
按照运算符的优先顺序可以得出:
a>b&&x<y 等价于 (a>b)&&(x<y)
!b==c||d<e 等价于 ((!b)==c)||(d<e)
a+b>c&&x+y<z 等价于 ((a+b)>c)&&((x+y)<z)
再来看一个例子,如有 !True || False && True
按逻辑运算的优先级别来分析则得到(True代表真,False代表假)
!True || False && True
False || False && True//!Ture先运算得 False
False || False //False && True运算得False
False //最终False || False得False
2.逻辑运算的值
逻辑运算的结果值分为“真”和“假”两种,用“1”和“0”来表示。求值规则如下:
1)与运算&&:参与运算的两个量都为真时,结果才为真,否则为假。
例如:
4>0&&9>2
因为4>0为真,9>2也为真,两边同时满足真,所以它们相“与”的结果也为真。
2)或运算||:参与运算的两个量只要有一个为真时,结果就为真。两个量都为假时,结果为假。(www.xing528.com)
例如:
4>0||5>8
虽然5>8为假,但因为5>0为真,所以其最终结果也就为真。
3)非运算!:参与运算的量为真时,结果为假;参与运算的量为假时,结果为真。
例如:
!(5>0)
其的结果应该为假。
虽然C语言在进行逻辑运算时,以“1”代表“真”,“0”代表“假”,但是否意味着“真”就是“1”,“假”就是“0”呢?其实在C语言中并不是这样的,C语言规定,“0”代表“假”,而以非“0”值代表为“真”,这点请大家注意区别。
例如:
由于1和9均为非“0”因此1&&9的值为“真”,即为“1”。
又如:
9||0的值为“真”,即为“1”。
3.逻辑表达式
逻辑表达式的一般形式为:
表达式1 逻辑运算符 表达式2
与关系表达式类似,逻辑表达式同样也可以出现嵌套的情况。
例如:
(x&&y)&&z
根据逻辑运算符的左结合性,上面式子等价于:
a&&b&&c
逻辑表达式的值就是式子中所有逻辑运算的最后结果值,用“1“和“0”分别代表“真”和“假”。
逻辑“与”,就是当条件式1与条件式2都为真时,结果为真(非0值),否则为假(0值)。也就是说编译器会先对条件式1进行判断,如果为真(非0值),则继续对条件式2进行判断,当结果为真时,逻辑运算的结果为真(值为1),如果结果为假时,逻辑运算的结果为假(0值)。如果条件式1的逻辑值为假时,那就不用再判断条件式2了,而直接给出运算结果为假,即值为“0”。
逻辑“或”,是指只要两个运算条件中有一个为“真”时,运算结果就为“真”,只有当条件式都为假时,逻辑运算结果才为假。
逻辑“非”,则是把逻辑运算结果值取反,也就是说如果两个条件式的运算值为真,进行逻辑非运算后则结果变为假,条件式运算值为假时,那么最后逻辑结果为真。
【例4.14】
例4.14中!x和!y的值分别为0,所以!x*!y也为0,故其输出值为0。由于x为非0,故!!!x对非0做了3次的逻辑非操作,最终的逻辑值为0。对于式子x||i&&j-3,先计算j-3的值为0,再求i&&j-3的逻辑值为0,但x为非0,因此x||i&&j-3的逻辑值为1。对于式子i<j&&x<y,由于i<j的值为1,而x<y为0,故表达式的值为“1”和“0”相与,最终等于0,对于式子i==5&&c&&(j=8),由于i==5为假,即值为0,该表达式由两个逻辑与运算组成,而当第一个表达式的值为“0”时,就不会再去判断后面的表达式的值了,所以整个表达式的值为0。对于式子x+y||i+j+k由于x+y的值为非0,故整个或表达式的值为1。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。