int i=1,j=1,k=1; printf("%d\n",++i||++j&&++k); printf("%d %d %d\n",i,j,k); 答案为什么是 1 2 1 1求解
3个回答
展开全部
对于C++,||运算是,如果左边部分是1,那么右边不需要判断,直接返回1;
所以对于++i||++j&&++k,++优先级高于||,首先判断++i,i=2是true,所以直接返回1,后面不需要判断了。
所以输出1;
而j,k值没有改变,i变成2;
所以输出:2,1,1
所以对于++i||++j&&++k,++优先级高于||,首先判断++i,i=2是true,所以直接返回1,后面不需要判断了。
所以输出1;
而j,k值没有改变,i变成2;
所以输出:2,1,1
追问
额。。是c,呵呵
按优先级的话,首先是++,其次不是&&,最后才是||么
追答
因为&&优先级高所以把第二个式子看成",++i||(++j&&++k);
然后再看||,由于或运算的结合方向是自左向右,所以先进行左边的++i,使x变为1,此时整个式子为true,就不用进行后面且运算了.
这种求值策略为“短路求值”。
展开全部
int i=1,j=1,k=1;
printf("%d\n",++i||++j&&++k);
printf("%d %d %d\n",i,j,k);
这里的||是短路或,在++i满足时,直接不执行后面的判断,返回真。
此时的i=2,j和k由于没执行,所以还是1.
printf("%d\n",++i||++j&&++k);
printf("%d %d %d\n",i,j,k);
这里的||是短路或,在++i满足时,直接不执行后面的判断,返回真。
此时的i=2,j和k由于没执行,所以还是1.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询