关于逻辑运算符的理解

int i=0;
int n=0;
1 && n++ || i++;
printf("i:%d\n", i);
printf("n:%d\n", n);

0 && n++ || i++;
printf("i:%d\n", i);
printf("n:%d\n", n);

return 0;


在网上看到这样一段代码。运行结果如下

输出:
i:1
n:1
i:2
n:1

经过仔细思量,终于理解,现将其记录下来以备将来翻阅

&& 和 ||都是左侧法则,从左侧向右侧执行。而且&&的优先级比||高,因此运行逻辑如下:

第一个逻辑表达式“1 && n++ || i++;”中,先判断 1&&n++,因为1为真,所以需要判断n++,因为n的初值是0,所以这个判断的结果是0,(执行之后,n的值也变成了1),接下来表达式变成了“0||i++”,因为左侧是0,所以要判断右侧,因此就会执行i++,而i初值是0,所以次表达式的结果为0,(执行之后,i的值也变成了1),因此就有了前两个输出。

第二个逻辑表达式“0 && n++ || i++;”,先判断“0&&n++”,因为有0存在,所以此表达式不再运行n++,直接判定结果为0,因此n依然是1。接下来判断后半段,此时的表达式已经变成“0||i++”,因为前面是0,所以会执行i++,因为i在第一个表达式中已经变成1了,所以这里是就会是2。因此就有了后两个的输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值