当前位置: 代码迷 >> C语言 >> 这个式子展开是不是怎样的呀
  详细解决方案

这个式子展开是不是怎样的呀

热度:151   发布时间:2006-08-03 10:47:49.0
这个式子展开是不是怎样的呀
int a=10,b=10;
a+=b-=a*=b/=3;
printf("a=%d,b=%d\n",a,b);

展开后:
a+=b-=a*=b=b/3
a+=b-=a=a*(b=b/3)
a+=b=b-(a=a*(b=b/3))
a=a+(b=b-(a=a*(b=b/3)))


a= ? b= ?

----------------解决方案--------------------------------------------------------
由于是从右向左的顺序计算
b=b/3 先得到b=3
a=a*b 又得到a=30
b=b-a 再得到b=-20
a=a+b 最后一步a=10
最后的结果就是:
a=10
b=-20
----------------解决方案--------------------------------------------------------
为什么在软件中运行结果为:

a=3
b=-27
----------------解决方案--------------------------------------------------------
应该是:
b=b/3 先得到b=3
a=a*b 又得到a=30
b=b-a 再得到b=-27
a=a+b 最后一步a=3
最后的结果就是:
a=3
b=-27
----------------解决方案--------------------------------------------------------
int a=10,b=10;
a+=b-=a*=b/=3;
展开为:a=a+(b=b-(a=a*(b=b/3)))

b=b/3=10/3=3;
a=a*b=10*3=30;
b=b-a=3-30=-27;
a=a+b=30+(-27)=3
最后输出 3,-27

----------------解决方案--------------------------------------------------------
原来这些值在不停地变
----------------解决方案--------------------------------------------------------
从右向左一次计算,表达式的值变动同时,原来的赋值a/b也跟着变动,计算是用最新的值代替
----------------解决方案--------------------------------------------------------
以下是引用nuciewth在2006-8-3 15:19:08的发言:
int a=10,b=10;
a+=b-=a*=b/=3;
展开为:a=a+(b=b-(a=a*(b=b/3)))

b=b/3=10/3=3;
a=a*b=10*3=30;
b=b-a=3-30=-27;
a=a+b=30+(-27)=3
最后输出 3,-27

恩 同意
楼主如果仔细看式子的话会发现不难的


----------------解决方案--------------------------------------------------------
从右到左就行了
----------------解决方案--------------------------------------------------------
  相关解决方案