C语言赋值运算符的结合方向是自右向左吗?

C语言赋值运算符的结合方向是自右向左吗?书上写的自右向左。可是下面这段代码输出为0,a-=a*=a;结合方向如果自右向左,a的值应该是-132。我用的是vs2010旗舰版... C语言赋值运算符的结合方向是自右向左吗?书上写的自右向左。可是下面这段代码输出为0,a-=a*=a;结合方向如果自右向左,a的值应该是-132。我用的是vs2010旗舰版。知道的朋友帮帮忙。
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{int a;
a=12;
a-=a*=a;

printf("%d",a);

system("pause");
}
展开
 我来答
风若远去何人留
2015-10-27 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450132
专业C/C++软件开发

向TA提问 私信TA
展开全部
赋值运算符是自右向左结合的。
以如下代码为例:
int a = 1,b=2,c=3;
a=b=c;
printf("%d,%d,%d\n", a,b,c);

如果赋值运算为自左向右,那么执行顺序为
a = b = 2;
b = c = 3;
结果a = 2, b=3, c = 3。
将输出2,3,3

如果赋值运算为自右向左,那么执行顺序为
b = c = 3;
a = b = 3;
结果a = 3, b=3, c = 3。
将输出3,3,3

通过实际运行,结果为3,3,3。说明结合方向是自右向左的。
古树上的毛毛虫
2012-05-19
知道答主
回答量:44
采纳率:0%
帮助的人:31.5万
展开全部
你看你的运算表达式:a-=a*=a;
先看第一步:
a*=a 根据你的表示方式那么这么计算就是a=a*a; 那么结果就是144

第二步
a-=a;
这个时候a的值就是144,这个144就是第一个步骤的结果,那么这样一来
a-=a;就相当于a=a-a; 那么输出的结果就是0 了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e4a1c0e
2012-05-19
知道答主
回答量:4
采纳率:0%
帮助的人:5.9万
展开全部
是的,先执行a*=a,此时 a=144,在执行a-=a; a=0
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
changhaiadsl9
2012-05-19
知道答主
回答量:33
采纳率:0%
帮助的人:10万
展开全部
不img却
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式