首页 理论教育 AVR单片机逻辑运算及表达式

AVR单片机逻辑运算及表达式

时间:2023-11-20 理论教育 版权反馈
【摘要】:同样逻辑运算符也有优先级别,从高到低排列,依次如下:!

AVR单片机逻辑运算及表达式

1.逻辑运算符及其优先次序

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

978-7-111-36320-0-Chapter04-24.jpg

图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】

978-7-111-36320-0-Chapter04-25.jpg

例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。

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

我要反馈