#include <stdio.h>
int main()
{
int a = 0;
printf("%d\n", !a && ++a );
printf("%d\n", !a);
return 0;
}
这一串代码定义了a =0 ,!a 是真值,++a也是真值,第一个printf打印的是1没问题。
因为++a,a 就变成了 1,第二个printf 打印的是0,没问题。
那么看第二段代码
#include <stdio.h>
int main()
{
int a = 0;
printf("%d\n", !a || ++a );
printf("%d\n", !a);
return 0;
}
这里第二个printf为什么打印的会是1呢?
这是因为逻辑运算&&和||的短路特性。
逻辑运算的工作原理是:
表达式A && 表达式B :
如果A的值为假就返回A的值并且不执行表达式B,否则执行表达式B并且返回B的值
表达式A || 表达式B :
如果A的值为真就返回A的值并且不执行表达式B,否则执行表达式B并且返回B的值
a 是0, !a结果是1 , 1为真就直接返回输出这个1, ||右边的 ++a 不会执行了
第二个 printf("%d\n", !a); 时a还是0, !a结果依然是1
!a || ++a 这个语句如果!a返回是true,++a就不会执行了,所以a的值还是0,所以结果是1
请采纳,谢谢!
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y