c/c++标准只明确规定了逻辑表达式的运算顺序, 其他运算在优先级相同的时候, 编译器可以自主决定计算顺序。所以,楼主的程序运行结果在不同编译器中可能是不同的。就算在同一个编译器中, 对不同的代码,计算顺序也可能是不相同的。因为编译器会对代码进行优化。 比如有代码如下:
int a=3;
int b=5;
int c= a*b*b+ a*b;
这时候, 编译器会发现, 先计算出右边的a*b, 左边的a*b*b只要在右边的基础上*b就行了, 所以它会先计算右边(当然有些编译器也可能先计算左边,比如有位牛人,他说,我要自己写个编译器,先计算左边,可以, 这是不违反c/c++标准的), 如果我们反过来写成: int c= a*b + a*b*b; 一般来说它就会先计算左边。那如果是 int c= a*b +a/b; 呢? 这时候就不知道到底先计算哪边了。事实上, c/c++之所以不规定运算顺序, 就是为了让编译器进行优化, 以实现最高的效率。
int a=3;
int b=5;
int c= a*b*b+ a*b;
这时候, 编译器会发现, 先计算出右边的a*b, 左边的a*b*b只要在右边的基础上*b就行了, 所以它会先计算右边(当然有些编译器也可能先计算左边,比如有位牛人,他说,我要自己写个编译器,先计算左边,可以, 这是不违反c/c++标准的), 如果我们反过来写成: int c= a*b + a*b*b; 一般来说它就会先计算左边。那如果是 int c= a*b +a/b; 呢? 这时候就不知道到底先计算哪边了。事实上, c/c++之所以不规定运算顺序, 就是为了让编译器进行优化, 以实现最高的效率。