若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后a的值为

若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后a的值为答案是-12,标答里说a=a+(a-(a*a)),请问a+中的a值为什么变成-6... 若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后a的值为
答案是-12,标答里说a=a+(a-(a*a)),请问a+中的a值为什么变成-6
展开
 我来答
iiiiiiiipl
2019-06-03 · TA获得超过9923个赞
知道答主
回答量:68
采纳率:66%
帮助的人:3.9万
展开全部

a=-12。

按照从左至右结合性和优先级顺序,先计算a-=a*a,最后a结果为a=a-a*a,a=3-3*3=-6;

再计算a+=-6,因为此时a的值已经变成了-6,所以计算过程是a=a+(-6)=-6-6=-12。

优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。

扩展资料:

C语言中各运算符的结合性分为两种:左结合性和右结合性。

例如:算术运算符的结合性是自左至右,即先左后右。

如有表达式x-y+z则y应先与“-”号结合,执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”。

而自右至左的结合方向称为“右结合性”。 最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。

C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。

参考资料:

百度百科-运算符

百度网友6fe74e2
推荐于2017-11-26 · TA获得超过6593个赞
知道大有可为答主
回答量:1973
采纳率:100%
帮助的人:276万
展开全部
a+=a-=a*a;
复合赋值表达式,从右到左运行,可以分拆成:
a-=a*a;
a+=a;
a的原值为3
a-=a*a;
相当于
a=a-a*a=3-3*3=-6;
再运行
a+=a;
自然就成了-12
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hengfuyang
2014-01-18 · TA获得超过187个赞
知道答主
回答量:62
采纳率:0%
帮助的人:59.3万
展开全部
  1. 执行(a*a),得值为9,注意此时还未赋值给变量a。

  2. 再执行a-=a*a,即 a=a-a*a,亦 a赋值为 3-9,得 a=-6。

  3. 后面你就明白了,因为“赋值表达式的结果是最左边赋值运算符左边变量(或者表达式)的值”。执行完赋值表达式(a-=a*a)后,a值为-6,   最后执行 a+= (a-=a*a).

  4. 因而 有a= -6 + -6

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zbing01
2014-01-18 · TA获得超过2721个赞
知道大有可为答主
回答量:1082
采纳率:75%
帮助的人:179万
展开全部
a+=a-=a*a可以看成
a=a-(a*a);
a=a+a;
明白吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
城露莫9827
高粉答主

2021-01-01 · 关注我不会让你失望
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式