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