首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-03-25 
++a*++a*++a 这个怎么运算?为什么这么算啊?a 1;c ++a*++a*++ac的结果是多少。我一直以为是:64我在vc的

++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這種方式不易理解。

热点排行