设有定义int a=6;则执行表达式a+=a-=a*a++后,a的值是多少?为什么?

 我来答
孙永超fight
2012-11-10 · TA获得超过732个赞
知道小有建树答主
回答量:603
采纳率:0%
帮助的人:718万
展开全部
这是编程里面的,要从右向左看,意思是将等号右边的计算结果赋值给等号左边的变量(本题中等号左边的变量即为a),可以拆分成三个式子:
1. a-=a*a;
2.a++
3. a+=之前的结果;
+=、-=这两个符号好像是为了节约内存什么的而设计的,上面两个式子的真实意思为:
1. a=a-(a*a)=6-6*6=-30;
2. a++ a=-29
3. a+=-30
a=-29-30=-59
更多追问追答
追问
这个29-30怎么感觉不对哎?我怎么觉得是-60+1?
追答
你理解错了,a+= b 就是a=a+b 不是a=b+1
Qrazy
2012-11-10
知道答主
回答量:47
采纳率:0%
帮助的人:11.5万
展开全部
a++等于6,执行后a等于7;
a*a++等于7*6=42;
a-=a*a++即a=a-42,即a=7-42=-35;

即a+=a,即a=a+a=-35+-35=-70;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ecitluo
2012-11-10 · TA获得超过764个赞
知道小有建树答主
回答量:275
采纳率:50%
帮助的人:137万
展开全部
a+=a-=a*a++;
按照一般的优先级和结合型理论,可以这样分解
a += (a -= (a*a++)); //
不过,至少在C/C++中, 子表达式的求值顺序是不确定的,在不同的编译器
下可能不同。
即使编译后计算出来是 -59,也是针对特定编译器而言的,
在子表达式 a -= a * a++ 中,是 -= 左边 a 先求值还是 子表达式 (a * a++) 先求值,
这是不确定的,随不同编译器而不同。如果 a 先求值,最终结果是-59,如果 a++先求值呢?结果肯定不同。
类似的问题不知道在百度上提了多少次啦。
在写代码时,有经验的人都避免在一个表达式中对一个变量做很多次修改。
追问
你的意思是先是求出整个式子得-60,再加1?
追答
我的意思是语句是错误的。
式子 a+=a-=a*a++ 是 哪里的考试题吗?
这个语句 编译当然能通过,但计算结果不是确定的,如果你实在要表达
" a += (a -= (a*a++)) " 的意思,不妨分开来写。

//分开来写的结果
int a = 6;
a -= a * a;
a += a + 1;
分开来写后,无论什么时候 a 最终的结果一定是 -59。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式