鱼C论坛

 找回密码
 立即注册
查看: 1362|回复: 1

[已解决]关于逻辑符号的应用

[复制链接]
发表于 2019-12-28 19:03:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
void main()
{
        int a=0,b=2,c=3;
        if(a--&&--b||++c);
        printf("%d %d %d",a,b,c);
        system("pause");
}

结果:-1 2 4

#include<stdio.h>
void main()
{
        int a=1,b=1,c=2;
        if(a--||b--&&++c);
        printf("%d %d %d",a,b,c);
        system("pause");
}
结果:0 1 2

为什么分别结果是这样,可以告诉是怎么判断的吗
最佳答案
2019-12-28 23:17:51
本帖最后由 superbe 于 2019-12-29 10:21 编辑

首先要清楚:
1、&&的优先级比||高
2、对于A&&B,如果A为假则结果为假,不再判断B;如果A为真,必须接着判断B,才能判定结果真假。
3、对于A||B,如果A为真则结果为真,不再判断B;如果A为假,必须接着判断B,才能判定结果真假。
4、后置--运算符是“先使用再自减”,前置--运算符是“先自减再使用”。++运算符同理。

上面明白了,其实自己就能分析出结果了。

下面是我的分析,可以不看,表达的不好。

第一段代码:

&&的优先级比||高,所以 a--&&--b||++c 相当于 (a--&&--b)||++c ,为叙述方便,用(①&&②)||③表示

||左边的①先取出a的值(为0)参加判断,因为&&的逻辑是只要一个为假结果就为假,所以此时就可以判定(①&&②)为假了,不需再判断②,所以--b没有执行,b的值没有变化(b==2),而a的值在使用完后再自减,变成了-1。

因为||左边已经为假,必须接着判断③才能判定整个式子的真假,而++c是先自增1变成了4,显然为真。

最后整个式子就变成了假||真==真。所以打印a,b,c的值分别是-1,2,4。

第二段代码:

同样由于优先级的关系,a--||b--&&++c,相当于 a--||(b--&&++c),表示成①||(②&&③)

||左边的①先取出a的值(为1)参加判断,显然为真。
因为||的逻辑是只要一个为真结果就为真,所以此时就可判定整个式子为真,||右边就不需再进行判断了,也就是②和③都没有被执行,b和c的值没有变化(b==1,c==2)。而a的值在使用完后再自减,变成了0。

最后整个式子为真,打印a,b,c的值分别是0,1,2。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-28 23:17:51 | 显示全部楼层    本楼为最佳答案   
本帖最后由 superbe 于 2019-12-29 10:21 编辑

首先要清楚:
1、&&的优先级比||高
2、对于A&&B,如果A为假则结果为假,不再判断B;如果A为真,必须接着判断B,才能判定结果真假。
3、对于A||B,如果A为真则结果为真,不再判断B;如果A为假,必须接着判断B,才能判定结果真假。
4、后置--运算符是“先使用再自减”,前置--运算符是“先自减再使用”。++运算符同理。

上面明白了,其实自己就能分析出结果了。

下面是我的分析,可以不看,表达的不好。

第一段代码:

&&的优先级比||高,所以 a--&&--b||++c 相当于 (a--&&--b)||++c ,为叙述方便,用(①&&②)||③表示

||左边的①先取出a的值(为0)参加判断,因为&&的逻辑是只要一个为假结果就为假,所以此时就可以判定(①&&②)为假了,不需再判断②,所以--b没有执行,b的值没有变化(b==2),而a的值在使用完后再自减,变成了-1。

因为||左边已经为假,必须接着判断③才能判定整个式子的真假,而++c是先自增1变成了4,显然为真。

最后整个式子就变成了假||真==真。所以打印a,b,c的值分别是-1,2,4。

第二段代码:

同样由于优先级的关系,a--||b--&&++c,相当于 a--||(b--&&++c),表示成①||(②&&③)

||左边的①先取出a的值(为1)参加判断,显然为真。
因为||的逻辑是只要一个为真结果就为真,所以此时就可判定整个式子为真,||右边就不需再进行判断了,也就是②和③都没有被执行,b和c的值没有变化(b==1,c==2)。而a的值在使用完后再自减,变成了0。

最后整个式子为真,打印a,b,c的值分别是0,1,2。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 05:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表