逻辑或与逻辑与的陷阱

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

#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;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值