自增/自减运算符

 

//C语言
int
main(void) { int a = 0; int p= (a++) + (a++) + (a++) + (a++);//0 + 0 + 0 + 0 printf("p=%d\n", p);//0 printf("a=%d\n", a);//4 a = 0; int p1= (a++) + (a++) + (a++) + (++a) + (a--);//0 + 0 + 0 + 1 + 1 printf("p1=%d\n", p1);//2 a = 0; int q = (a++) + (++a); //1 + 1 printf("q=%d\n", q);//2 a = 2; int r = (++a) * (--a);//2 * 2 printf("r=%d\n", r);//4 a = 0; int s = (++a) + (++a) + (++a); //2 + 2 + 3 printf("s=%d\n", s);//7 a = 0; int t = (++a) + (++a) + (++a) + (++a);//2 + 2 + 3 + 4 printf("t=%d\n", t);//11 对比第一个例子 a = 0; int u = (++a) + (++a) + (++a) + (a++);//2 + 2 + 3 + 3 printf("%d\n", u);//10 对比上一个例子 a = 0; int v = (++a) + (++a) + (a++) + (++a); // 2 + 2 + 2 + 3 printf("v=%d\n", v);//9 //以上结果的编译平台:VC++6.0 //分析结果(个人观点,可能不对): 计算都是使用2个寄存器来对2个操作数A'和A''进行计算 //显然我们这里A'和A''是同一个操作数, 对两个操作数进行计算前,会将两个操作数的前缀 //自增\自减运算符都运算出来,然后才进行计算的。
//对于后缀自增\自减运算符,则是等整个表达式计算完成后才做对应的操作。 return 0; }

不同编译器或者不同语言,结果可能不一样。项目中不要写出这种有歧义的代码来。

//Java
public
static void main(String[] args) { int a = 0; int p= (a++) + (a++);//0 + 1 System.out.println(a);//2 System.out.println("p:" + p);//1 a = 0; int p1= (a++) + (a++) + (a++) + (++a) + a;//0 + 1 + 2 + 4 + 4 System.out.println("p1:" + p1);//11 a = 2; int q = (++a) + (++a); //3 + 4 System.out.println("q:" + q);//7 a = 2; int r = (++a) * (++a);//3*4 System.out.println("r:" + r);//12 a = 0; int t = (++a) + (++a) + (a++) + a;//1 + 2 + 2 + 3 System.out.println("t:" + t);//8 a = 0; int u = (++a) + (++a) + (++a) + (a++);//1 + 2 + 3 + 3 System.out.println("u:" + u);//9 a = 0; int v = (++a) + (++a) + (a++) + (++a); // 1 + 2 + 2 + 4 System.out.println("v:" + v);//9 //平台:Eclipse //显然java和C语言里面做法是不一样的(当然,还有和编译器有关) //java中2个操作数A'和A''(这里A‘和A''是同一个操作数),A’做自增\自减时立马生效( //感觉像是生成了一个立即数,不受后面++A‘'的影响),然后再去处理++A‘‘, A''受A’
//自增\自减的影响

 

-(负号) > ++ -- > * / % > + -

++ -- 从右至左计算

尽信书不如无书,如有不正确之处,希望各位看官留言。

posted @ 2015-02-28 22:03  牧 天  阅读(212)  评论(0)    收藏  举报