+ -
当前位置:首页 → 问答吧 → 设 int a=12; 表达式a+=a-=a*=a的值是?

设 int a=12; 表达式a+=a-=a*=a的值是?

时间:2010-07-17

来源:互联网

菜鸟问题,高手能说说表达式的计算过程么?我算出来是-120;编译器里运行后出来是0;不知道问题出在哪里了?

设 int a=12; 表达式a+=a-=a*=a的值是?

作者: zheguzai   发布时间: 2010-07-17

从右向左算
a   +=    a-    =    a*    =   a
0            0            144       12

作者: teng0210   发布时间: 2010-07-17

这题纯找抽。
也就是说编译器给这么处理了?

a+=(a-=(a*=a))  ==>  a = 12  ==>  a*=a = 144  ==>  a-=a = 0  ==>  a+=a = 0

作者: langue   发布时间: 2010-07-17

复合赋值运算符的结合性为从右至左,所以表达式“a+=a-=a*=a”相当于“a+=(a-=(a*=a))”。
先执行“a*=a”相当于“a=a*a=12*12=144”,即a=144。
再执行“a-=a”相当于“a=a-a=144-144=0”,即a=0。
最后执行“a+=a”相当于“a=a+a=0+0=0”,即a=0。

作者: 梁军   发布时间: 2010-07-17

钻这种牛角没啥意义

作者: hellioncu   发布时间: 2010-07-17

这活还是交给编译器干吧~

作者: efolzl   发布时间: 2010-07-17

这表达式本身就是错误的
http://bbs.chinaunix.net/viewthr ... %3Bfilter%3D2592000

作者: pmerofc   发布时间: 2010-07-17

这样写是故意显摆coder牛x吗。。
没什么意义啊

作者: pandaiam   发布时间: 2010-07-17