机器是没脾气的,它只能按规定好的东西运行。至于别的编绎环境不了解,VC++6.0反正是这样的了。
int a(2),b ;
b=(++a)*(++a)*(++a)+(a++)*((a--)*(--a));
。。。。。。式一
这个式子相当于:
b=(++a)*(++a)*(++a)+a*(a*(--a));
。。。。。 式二
a++;a--;
是的,所有后自增、后自减都在算出整个式子后再算;
至于前自增、前自减嘛,是这样的:
b=(++a*
1
++a
)*
2
(++a
)+
3
a
*
4
(a*
5
(--a)
);。。。。。式二
把自增自减符号不写出来就是这样的:
b=(a*
1
a)*
2
a+
3
a*
4
(a*
5
a);。。。。。。式三
a的值依次为4,4,5,4,4,4;于是b=(4*4)*5+4*(4*4)=144;
1乘号
这里是a*a,所以要先把两个++算了再乘,也就是两个a都是4了;
2乘号
这里是(前面的结果)*a,所以这个a的++要先算后乘,所以这个a 是5;
3加号
这里是(前面的结果)+(后面的结果),这里还未计算,所以这个加号等着看吧;
4乘号
a*(后面的结果),所以还是先算括号里的了;也还未计算,(不到乘号算的时候这个a的值就未定);
5乘号
是a*a,所以要把后面那个a的--先算了,再乘,于是这两个a都是4;
再回来算4乘号
,这时是a*(),而a的值还是4所以是4*();
最后3加号
(前面的结果)+(后面的结果);
总之,每个a都是在它被算术运算符计算前才确定它的值的,它前面的自增、自减才会被运算。也就是说一个算术运算符两边的a的值肯定是一样的。
所以只需要三步了:
1,把后自增、自减全部抛到整个式子最后面;(从式一到式二)
2,把前自增、前自减都记在别的地方,或直接对照式二;(从式二到式三)
3,在式三中按数学上的运算顺序算就行了,当计算中要用到a的值就把它前面的++或--算了(如果同时要用两个a一定要先把两个的++或--都算了)再计算。