高人知道这个表达式是怎么得出这个结果的吗?

来源:百度知道 编辑:UC知道 时间:2024/06/02 15:36:33
int x = 1;
x = (x++ +1) * (++x +1) * x;
//计算结果是 x = 19
在这里我十分感谢大家对我的支持!
资州纵寻,你好!
有一点我想再问你一次,第4步的“x得先加1”怎么理解?还有第6步?好象x多递增了一次?
以下为引用:
4、此时因为执行完了第二个括号这个过程,所以运行乘以x的时候,“x得先加1”,就是2*3*3;
5、计算2*3*3得出x=18
6、然后进入第二步的那个x自加1所以得19!

楼主,你好!

结果有两种情况和编译器有关!我在不同编译器得了不同的结果。

A、我在Microsoft visual stdio 2008上运行的结果是19
我推断思路如下:
1、首先算两括号。。
2、进入x++ +1这里,进入之后先x与++结合,但是x++中++在后,所以先括号算完之后,然后x自加1,此时第一个括号等于2,x=1;
3、进入第二个括号,首先++与x结合,x自加成2,再加上1,所以第二个括号的值为3,算完之后x=2;
4、此时因为执行完了第二个括号这个过程,所以运行乘以x的时候,x得先加1,就是2*3*3;
5、计算2*3*3得出x=18
6、然后进入第二步的那个x自加1所以得19!

我在MinGW Developer Studio上运行的结果是13
我推断思路如下:
1、首先算两括号。。
2、进入x++ +1这里,进入之后先x与++结合,但是x++中++在后,所以先算整个表达式等算完之后,然后x自加1,此时第一个括号等于2,x=1;
3、进入第二个括号,首先++与x结合,x自加成2,再加上1,所以第二个括号的值为3,算完之后x=2;
4、此时x的值为2
5、计算2*3*2得出x=12
6、然后进入第二步的那个x自加1所以得13!

可以看出其实是第二步不相同。。

x = (x++ +1) * (++x +1) * x;

x=(1+1)*(3+1)*3=24

我没装c,所以用JavaScript算的,可能结果不一样。
这个例子没有实际意义,只有理论意义。在实际编程中,应该不会用这样的代码。
x++和++x这样的代码,只应该单独使用,不宜混合运算。

根据结果来看,仿佛是++x比*优先级更高,在整个表达式中最先运算,而x++优先级最低,在加法和乘法完成之后才计算。因此++x->x=2,计算式就成了
(2+1)*(2+1)*2=18,在计算x++这个,x=18,于是结果为19.
语句a = (++a +1) * a的