4.执行下列语句后a的值为( ),b的值为( C ). int a, b, c; a=b=c=1; ++a|| ++b &&
inta,b,c;a=b=c=1;++a||++b&&++c;A)错误1B)22C)21D)11求详解!...
int a, b, c;
a=b=c=1;
++a|| ++b && ++c;
A) 错误 1 B) 2 2 C) 2 1 D) 1 1
求详解! 展开
a=b=c=1;
++a|| ++b && ++c;
A) 错误 1 B) 2 2 C) 2 1 D) 1 1
求详解! 展开
2个回答
展开全部
||的优先级高,所以++a||++b作为&&的左表达式参加运算
a的值为1,++a的结果为非零,所以||成立,忽略了++b
所以a的值被修改,b的值没有被修改
故a=2,b=1
满意请采纳,不满意请追问
a的值为1,++a的结果为非零,所以||成立,忽略了++b
所以a的值被修改,b的值没有被修改
故a=2,b=1
满意请采纳,不满意请追问
追问
为什么只有a的值被修改,b的没被修改?
追答
因为||对流程有控制性,
如果||的左表达式成立,就不会对他的右表达式进行计算,
在你的例子中,++a的值已经是2,是非零
那么||已经满足(有一个值是真就满足),所以这时就忽略了右表达式的计算
要仔细看看书,这个知识点,书上都会有的
展开全部
// 定义3个变量a、b、c
int a, b, c;
// 给3个变量赋初值,a=1 b=1 c=1
a=b=c=1;
// 逻辑与的优先级高于逻辑或,相当于++a || (++b && ++c)
// 所以先判断++a是否为真,++a,前置自增后a为2,为真
// 而此时,由于是逻辑或运算,只要有一个为真,结果就为真,已经可以判定这个表达式的值为真
// 所以,后面括号中的表达式就不会运算,b为1,c为1
// 这个行为通常称为“短路求值”
++a || ++b && ++c;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询