#include<stdio.h>
void main()
{
int a=1,b=2,c=3,d;
d=--a&&b--||c--;
printf("%d %d %d %d\n",a,b,c,d);
}
结果是: 0 2 2 1
为什么b没变,c自减了???
C语言逻辑关系
答案:1 悬赏:10 手机版
解决时间 2021-03-02 04:38
- 提问者网友:杀手的诗
- 2021-03-01 09:53
最佳答案
- 五星知识达人网友:大漠
- 2020-04-19 09:29
逻辑与&&的左侧表达式若为假,则结果一定为假,不再计算右侧表达式;
同理,逻辑或||的左侧表达式若为真,则结果一定为真,不再计算右侧表达式。
上述两点特性称为短路运算。
--a&&b--,由于左侧表达式--a=0为假,&&表达式结果一定为假,不再计算b--,直接返回0;
0||c--,左侧表达式0为假不能确保||结果一定为假,仍需计算右侧表达式,故计算c--,此时引用c的原值然后将c自减,结果为3,因此||表达式结果为真,返回1。
最终d被赋值为1。
同理,逻辑或||的左侧表达式若为真,则结果一定为真,不再计算右侧表达式。
上述两点特性称为短路运算。
--a&&b--,由于左侧表达式--a=0为假,&&表达式结果一定为假,不再计算b--,直接返回0;
0||c--,左侧表达式0为假不能确保||结果一定为假,仍需计算右侧表达式,故计算c--,此时引用c的原值然后将c自减,结果为3,因此||表达式结果为真,返回1。
最终d被赋值为1。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯