逻辑或与逻辑与的陷阱

逻辑或和逻辑与稍有不慎我们就会陷入他的陷阱;
接下来我们来看一下这个代码;

#include<stdio.h>
int main()
{
int i=0;
int a = 0;
int b = 2;
int c = 3;
int d = 4;
i = a++ && ++b && d++;
printf("a = %d\n,b = %d\n,c = %d\n,d = %d\n",a,b,c,d);
return 0;
}

如果想当然的计算结果为 1 3 3 5;那么就果不其然的掉进了他的陷阱;
在i的这个表达式中他的计算顺序是这样的;

i = a++ && ++b && d++;
   ( 0  && ++b && d++)

在逻辑与的计算中逻辑与就相当于且的意思,而0和任何数逻辑与都为0,所以在程序执行的过程中++b这个表达式就没有执行;

i = a++ && ++b && d++;
   (     0     && d++)

同理,d++这个表达式也并未执行;这样代码跑起来后结果就是:1 2 3 4;

那么在逻辑或当中:

#include<stdio.h>
int main()
{
int i=0;
int a = 1;
int b = 2;
int c = 3;
int d = 4;
i = a++ || ++b || d++;
printf("a = %d\n,b = %d\n,c = %d\n,d = %d\n",a,b,c,d);
return 0;
}

在i的表达式中;逻辑或就相当于我们数学中所谈到的或;

i = a++ || ++b || d++;
   ( 1 || ++b || d++);

在执行中因为1是真,在进行逻辑或的时候都是真,所以++b这个表达式并未执行,同理d++也并未执行;那么这个代码跑起来的结果是2 2 3 4;

发布了20 篇原创文章 · 获赞 9 · 访问量 912

猜你喜欢

转载自blog.csdn.net/weixin_44915811/article/details/90417381