/*测试自加自减运算优先级*/
/*VC++6.0编译*/
#include <stdio.h>
#include <math.h>
#include <iostream.h>
#include <conio.h>
void main()
{
int x=5;
long y1,y2,y3,y4;
y1=(x++)+(x--)+(++x)+(--x);
x=5;
y2=(x--)+(x++)+(--x)+(++x);
x=5;
y3=(++x)+(--x)+(x++)+(x--);
x=5;
y4=(--x)+(++x)+(x--)+(x++);
cout<<"y1="<<y1<<endl;
cout<<"y2="<<y2<<endl;
cout<<"y3="<<y3<<endl;
cout<<"y4="<<y4<<endl;
getch();
}
RESULT>>
y1=21
y2=19
y3=20
y4=20
--------------------------
/*测试自加自减运算优先级*/
/*TC2.0编译*/
#include <stdio.h>
#include <math.h>
void main()
{
int x=5;
long y1,y2,y3,y4;
y1=(x++)+(x--)+(++x)+(--x);
x=5;
y2=(x--)+(x++)+(--x)+(++x);
x=5;
y3=(++x)+(--x)+(x++)+(x--);
x=5;
y4=(--x)+(++x)+(x--)+(x++);
printf("y1=%ld\ny2=%ld\ny3=%ld\ny4=%ld\n",y1,y2,y3,y4);
printf("Complet>>>");
getch();
}
RESLUT>>
y1=20.000
y2=20.000
y3=20.000
y4=20.000
參考答案:不会吧?居然还打印出小数点来?还精确到三位小数?那都是长整数啊!
严格按照C/C++的求值顺序演算你的如下表达式
x=5; y1=(x++)+(x--)+(++x)+(--x);
x=5; y2=(x--)+(x++)+(--x)+(++x);
x=5; y3=(++x)+(--x)+(x++)+(x--);
x=5; y4=(--x)+(++x)+(x--)+(x++);
可以得到
y1=5+6+6+5=22
y2=5+4+4+5=18
y3=6+5+5+6=22
y4=4+5+5+4=18
与你的两种实际计算结果都不同。这只可能是编译器“优化”的结果。而优化本身并没有标准的规定方法,因此两种编译器又产生了区别。你可以在编译时关闭优化开关,我估计两种编译器都会产生我演算出来的理论值了。