一. 先解说一个简单的例子: int i=5; i+=i-=1;
这式子相当于是 i+=(i-=1);
i-=1后得到4, 但还来不及存入i, 就把得到的4加入刚开始的i,
之后i变成是9
这式子翻成bytecode 为
0: iconst_5
1: istore_0
2: iload_0
3: iinc 0, -1
6: iload_0
7: iadd
8: istore_0
本题 i=2; i+= i-= i*i;
相当于 i=2; i+= (i-= i*i);
i-=i*i 变 -2, 再加入原先的i 得到0.
为什么在VC 下面运行,结果为-4? 哪位大神可以帮助解答?
#include "stdio.h"int main(){ int i=2; int j=2; int temp = j+=j-=j*j; printf("j=%d\n",temp); printf("i+=i-=i*i=%d\n",i+=i-=i*i); return 0;}
二.
(1) i=i+1
它的效率最低,因为其执行过程如下:
1-1 读取右x的地址;1-2 x+1;
1-3 读取左x的地址;
1-4 将右值传给左边的x
(temp=i+1; i=temp;)
(2) i+=1
它的执行过程是:
2-1 读取右x的地址;2-2 x+1;
2-3 将得到的值传给x
(3) i++
它的执行过程是:
3-1 读取右x的地址3-2 x自增1;
(temp=i; i=temp+1; return temp;)
(4)++i
++i的过程最简单:
4-1 i增1然后return i 的值,一步完成,没有给任何temp变量赋值。
建议写成i+=1这样效率高,不要过多地使用i++和++i,太多了会容易引起歧义~~ 建议只在循环里使用,运算的时候不要用。 三. 哪位大神帮忙解答一下? 为什么 |