读书人

++a*++a*++a 这个如何运算

发布时间: 2012-03-25 20:55:17 作者: rapoo

++a*++a*++a 这个怎么运算?
为什么这么算啊?

a = 1;
c = ++a*++a*++a;

c的结果是多少。
我一直以为是:64

我在vc的环境下的出的结果是:36

++和*的运算顺序是怎么弄的。

[解决办法]
视编译器而定
无任何研究价值!
[解决办法]

C/C++ code
#include <stdio.h>int main(){    int a=1;    int c=0;    int d;    c=++a*(++a);   //a的值为3        d=c*(++a);       //a的值为4        printf("%d\n",d);return 0;}
[解决办法]
先自增两次做乘法运算,得出的积再与a的第三次自增值做乘法。
3*3*4=36
仅仅指vc是这样实现的,与编译器有关。
[解决办法]

我想到了一种可能

*
/ \
* ++ a
/ \
++a ++a

为了保证优先级和结合性
只能从左以及下开始向右以及上方向做
这样前两个++优先级最高
第一个*与第三个++同级
最后一个*优先级最低


声明:
我只是在猜测编译器如何分析表达式的可能性
而编译器如何分析表达式既不是c的范畴也不是c++的范畴
这个表达式的结果可以为64或24
都不违背c或c++的定义
[解决办法]
a = 1 ;
c = ++a*++a*++a =
(++a)*(++a)*(++a) //二叉解析:表式1*表式2*表式3
= 2*3*4 = 24 ;

= (++a * ++a) * (++a) //解析:表式1*表式2
= 3*3*4 = 36 ;

= ++a*++a*++a //解析:一化表式 a*a*a
= 4*4*4 = 64 ;


前++,定量要先於表式算,但有定表式如何拆分。

最不同意就是VC方案,24或64都理解,就是36方式不易理解。

读书人网 >C语言

热点推荐