这个式子展开是不是怎样的呀
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
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
恩 同意
楼主如果仔细看式子的话会发现不难的
----------------解决方案--------------------------------------------------------
从右到左就行了
----------------解决方案--------------------------------------------------------