首页 理论教育 C51单片机高效入门:逻辑运算符与表达式

C51单片机高效入门:逻辑运算符与表达式

时间:2023-11-17 理论教育 版权反馈
【摘要】:True||False&&True按逻辑运算的优先级别来分析则得到3.2.4.2 逻辑运算的值逻辑运算的结果值分为“真”和“假”两种,用“1”和“0”来表示。

C51单片机高效入门:逻辑运算符与表达式

3.2.4.1 逻辑运算符及其优先次序

关系运算符所能反映的是两个表达式之间的大小关系,而逻辑运算符则是用于求条件式的逻辑值,用逻辑运算符将关系表达式或逻辑量连接起来的就是逻辑表达式。也许你会对为什么“逻辑运算符将关系表达式连接起来就是逻辑表达式了”这一描述有疑惑的地方。其实在前面部分我们已经说过,“用关系运算符的运算结果只有“0”和“1”两种,也就是逻辑的真和假”,换句话说也就是逻辑量,而逻辑运算符就用于对逻辑量运算的表达。

C语言中提供了3种逻辑运算符:

1)&&“与”运算

2)||“或”运算

3)!“非”运算

与运算符“&&”和或运算符“||”均为双目运算符,具有左结合特性。非运算符“!”为单目运算符,具有右结合特性。

逻辑运算符和其他运算符优先级的关系如图3-6所示。

“&&”和“||”低于关系运算符,“!”高于算术运算符。

逻辑运算符也有优先级别,从高到低排列,依次如下:!(逻辑非)→&&(逻辑与)→||(逻辑或)。逻辑非的优先级最高,逻辑或的优先级最低。

按照运算符的优先顺序可以得出

978-7-111-30335-0-Chapter03-38.jpg

978-7-111-30335-0-Chapter03-39.jpg

图3-6 运算符优先级

再来看一个例子,如有!True||False&&True

按逻辑运算的优先级别来分析则得到(True代表真,False代表假)

978-7-111-30335-0-Chapter03-40.jpg

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】

978-7-111-30335-0-Chapter03-41.jpg

例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代表假)

978-7-111-30335-0-Chapter03-42.jpg

下面我们用程序语言来表达:

978-7-111-30335-0-Chapter03-43.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈