关于c++中逻辑与&&和逻辑或||的问题

“假设a=0,b=6,c=7。表达式a++&&b++&&c++运算完成后,整个表达式的值为false(或0),a的值为1,b和c的值不变。表达式a++||b++||c++... “假设a=0,b=6,c=7。
表达式a++&&b++&&c++运算完成后,整个表达式的值为false(或0),a的值为1,b和c的值不变。
表达式a++||b++||c++运算完成后整个表达式的值为true(或1),a的值为1,b的值为7,c的值不变。”
请问一下这两个表达式的详细运算过程是怎么样的?(就是说一下a,b,c的值是如何变化的以及整个表达式的值是怎么出来的,两个式子分别说一下)
展开
 我来答
537581603
推荐于2018-04-12
知道答主
回答量:9
采纳率:0%
帮助的人:6.9万
展开全部
首先第一个与运算
与运算必须是所有都为真 此式子的值才为真,首先系统先判断第一个值,A 因为A的值为0,所以系统不需要再判断后面的是否为真 也就不需要再执行后面的B++,C++,所以就只执行了以个A++,所以A的值为1,B,C的值不变
而或运算是所有值为假,式子才为假,当系统判断第一个A的值为假时,执行A++,A的值为1,然后系统再判断B的值,这时B为真,执行B++,B的值为7,应为B为真 这个式子的值已经为真了,所以系统不需要再判断后面的语句,也就不执行C++,所以C不变
cmnull
2010-04-12 · TA获得超过310个赞
知道小有建树答主
回答量:102
采纳率:0%
帮助的人:143万
展开全部
LZ 我在 VS 2008 用如下代码做了测试
#include<iostream>

int main()
{
int a(0), b(6), c(7);
std::cout << (a++&&b++&&c++) << std::endl;
std::cout << a << std::endl;
std::cout << b << std::endl;
std::cout << c << std::endl;
return 0;
}

显示为
0
1
6
7

也就是只有 a 递增了,b c 不变。我觉得这样才符合我所学的解释。

对于 a++&&b++&&c++ 这个表达式,

首先从运算符优先级(Precedence)分析为:
(a++)&&(b++)&&(c++) 即,所有 后置递增‘++’应该先运算。

然后 从 && 的集合性(Associativity)分析
((a++)&&(b++))&&(c++) 即,从左到右先计算左边的‘&&’,即 (a++)&&(b++)

最后,也是最关键的一个步骤就是 C++ 标准对 && || 两个运算符有特殊的规定:
短路求值(short-circuit evaluation) —— 简单的说,有表达式 A&&B 其中 A,B 分别是两个表达式,编译器会先计算左边的 A 的值,如果A 的值为 0,则不管 B 的值最后是多少都不影响 A&&B 的结果了(A&&B 的结果已经提前由 A 决定了为 0 对不?),那么编译器就不再对 B 求值了,A&&B 只计算了 A 就直接返回为 0了。

所以这里 ((a++)&&(b++))&&(c++),由于第一个 && 的左边 a++ 返回 0,所以 b++ 被略过,以此类推 c++ 也应该被略过

这样最终 只有 a++ 被求值,b++ c++ 被忽略,a++&&b++&&c++返回0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
勤快且清廉的小福星H
2010-04-12
知道答主
回答量:25
采纳率:0%
帮助的人:0
展开全部
a++&&b++&&c++中,从左到右计算,先计算a++,(a++)==0,在逻辑与中,当从左到右计算到某一数组已经是false(或0)了,编译器就不会计算后面的了(因为再计算下去对这式子已经没意义了,式子已经是false(或0)了),然后就没计算b和c...注:(a++)的这句的值为0(因为之前a==0),但a在参与完计算后才自增1,你要换成是++a就不同了;
a++||b++||c++中,一个为false(或0)无法对语句产生必然结果,所以编译器需要将a.b.c计算完才能得出式子结果,就自然把a.b.c全计算了(即全部自增1),但对编译器来说这个式子就是计算0||6||7是否为真,然后才将a.b.c自增1...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ck659
2010-04-12 · TA获得超过1589个赞
知道小有建树答主
回答量:1650
采纳率:0%
帮助的人:577万
展开全部
你搜一下“猝死法”就知道了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a7eec3a
2018-09-23
知道答主
回答量:1
采纳率:0%
帮助的人:803
展开全部
突然懂了,谢谢您了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式